Миф excel конец листа

A_nAs_tAsi_A

0 / 0 / 0

Регистрация: 21.08.2020

Сообщений: 49

1

21.08.2020, 10:33. Показов 3767. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день!
У меня есть файл в котором необходимо определить последнюю строку.
Пыталась сделать следующим образом:

Visual Basic
1
2
Dim LastRow As Long
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Но так ищет только до первой пустой ячейке в столбце.
Количество заполненных и пустых ячеек в файле неизвестно и находятся они в произвольном порядке.
ПОдскажите, пожалуйста, можно ли как-то осуществить поиск последней ячейки?



0



КостяФедореев

Часто онлайн

792 / 530 / 238

Регистрация: 09.01.2017

Сообщений: 1,820

21.08.2020, 10:35

2

Лучший ответ Сообщение было отмечено A_nAs_tAsi_A как решение

Решение

A_nAs_tAsi_A,

Visual Basic
1
LastRow = Cells.SpecialCells(xlLastCell).Row



1



Narimanych

2632 / 1637 / 745

Регистрация: 23.03.2015

Сообщений: 5,143

21.08.2020, 10:46

3

A_nAs_tAsi_A,

Visual Basic
1
LastRow = Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row

лучше….



1



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

25.08.2020, 09:25

4

Цитата
Сообщение от A_nAs_tAsi_A
Посмотреть сообщение

Но так ищет только до первой пустой ячейке в столбце.

— вот вообще не так.
Так ищет вот именно первую заполненную в определённом столбце.
А SpecialCells(xlLastCell) — последнюю хоть как-то когда-то использованную, не факт что там вообще есть данные.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

25.08.2020, 09:25

4

I am trying to add an Excel sheet named «Temp» at the end of all existing sheets, but this code is not working:

Private Sub CreateSheet()
    Dim ws As Worksheet
    ws.Name = "Tempo"
    Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
End Sub

Can you please let me know why?

ZygD's user avatar

ZygD

21k39 gold badges77 silver badges98 bronze badges

asked Dec 20, 2013 at 6:33

Behseini's user avatar

1

Try this:

Private Sub CreateSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(After:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = "Tempo"
End Sub

Or use a With clause to avoid repeatedly calling out your object

Private Sub CreateSheet()
    Dim ws As Worksheet
    With ThisWorkbook
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        ws.Name = "Tempo"
    End With
End Sub

Above can be further simplified if you don’t need to call out on the same worksheet in the rest of the code.

Sub CreateSheet()
    With ThisWorkbook
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Temp"
    End With
End Sub

answered Dec 20, 2013 at 6:39

L42's user avatar

L42L42

19.3k11 gold badges43 silver badges68 bronze badges

5

Kindly use this one liner:

Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"

answered Jan 3, 2016 at 5:27

Amar's user avatar

AmarAmar

4294 silver badges6 bronze badges

2

ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "XYZ"

(when you add a worksheet, anyway it’ll be the active sheet)

answered Sep 14, 2015 at 7:56

Saptarshi's user avatar

SaptarshiSaptarshi

1252 silver badges3 bronze badges

Try this:

Public Enum iSide
iBefore
iAfter
End Enum
Private Function addSheet(ByRef inWB As Workbook, ByVal inBeforeOrAfter As iSide, ByRef inNamePrefix As String, ByVal inName As String) As Worksheet
    On Error GoTo the_dark

    Dim wsSheet As Worksheet
    Dim bFoundWS As Boolean
    bFoundWS = False
    If inNamePrefix <> "" Then
        Set wsSheet = findWS(inWB, inNamePrefix, bFoundWS)
    End If

    If inBeforeOrAfter = iAfter Then
        If wsSheet Is Nothing Or bFoundWS = False Then
            Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = inName
        Else
            Worksheets.Add(After:=wsSheet).Name = inName
        End If
    Else
        If wsSheet Is Nothing Or bFoundWS = False Then
            Worksheets.Add(Before:=Worksheets(1)).Name = inName
        Else
            Worksheets.Add(Before:=wsSheet).Name = inName
        End If
    End If

    Set addSheet = findWS(inWB, inName, bFoundWS)         ' just to confirm it exists and gets it handle

    the_light:
    Exit Function
    the_dark:
    MsgBox "addSheet: " & inName & ": " & Err.Description, vbOKOnly, "unexpected error"
    Err.Clear
    GoTo the_light
End Function

JF it's user avatar

JF it

2,4033 gold badges20 silver badges30 bronze badges

answered Oct 7, 2014 at 12:44

Mr F's user avatar

Mr FMr F

511 silver badge1 bronze badge

Try to use:

Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "MySheet"

If you want to check whether a sheet with the same name already exists, you can create a function:

Function funcCreateList(argCreateList)
    For Each Worksheet In ThisWorkbook.Worksheets
        If argCreateList = Worksheet.Name Then
            Exit Function ' if found - exit function
        End If
    Next Worksheet
    Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = argCreateList
End Function

When the function is created, you can call it from your main Sub, e.g.:

Sub main

    funcCreateList "MySheet"

Exit Sub

answered Mar 23, 2016 at 10:14

Ivan Tokarev's user avatar

Try switching the order of your code. You must create the worksheet first in order to name it.

Private Sub CreateSheet()
    Dim ws As Worksheet
    Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
    ws.Name = "Tempo"
End Sub

thanks,

answered Nov 15, 2016 at 19:04

Developer's user avatar

DeveloperDeveloper

7417 silver badges12 bronze badges

This will give you the option to:

  1. Overwrite or Preserve a tab that has the same name.
  2. Place the sheet at End of all tabs or Next to the current tab.
  3. Select your New sheet or the Active one.

Call CreateWorksheet("New", False, False, False)


Sub CreateWorksheet(sheetName, preserveOldSheet, isLastSheet, selectActiveSheet)
  activeSheetNumber = Sheets(ActiveSheet.Name).Index

  If (Evaluate("ISREF('" & sheetName & "'!A1)")) Then 'Does sheet exist?
    If (preserveOldSheet) Then
      MsgBox ("Can not create sheet " + sheetName + ". This sheet exist.")
      Exit Sub
    End If
      Application.DisplayAlerts = False
      Worksheets(sheetName).Delete
    End If

    If (isLastSheet) Then
      Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheetName 'Place sheet at the end.
    Else 'Place sheet after the active sheet.
      Sheets.Add(After:=Sheets(activeSheetNumber)).Name = sheetName
    End If

    If (selectActiveSheet) Then
      Sheets(activeSheetNumber).Activate
    End If

End Sub

answered Oct 17, 2017 at 22:19

moberme's user avatar

mobermemoberme

6597 silver badges13 bronze badges

This is a quick and simple add of a named tab to the current worksheet:

Sheets.Add.Name = "Tempo"

rink.attendant.6's user avatar

answered Oct 22, 2015 at 19:04

Jan's user avatar

JanJan

4113 silver badges9 bronze badges

Свойство End объекта Range применяется для поиска первых и последних заполненных ячеек в VBA Excel — аналог сочетания клавиш Ctrl+стрелка.

Свойство End объекта Range возвращает объект Range, представляющий ячейку в конце или начале заполненной значениями области исходного диапазона по строке или столбцу в зависимости от указанного направления. Является в VBA Excel программным аналогом сочетания клавиш — Ctrl+стрелка (вверх, вниз, вправо, влево).

Возвращаемая свойством Range.End ячейка в зависимости от расположения и содержания исходной:

Исходная ячейка Возвращаемая ячейка
Исходная ячейка пустая Первая заполненная ячейка или, если в указанном направлении заполненных ячеек нет, последняя ячейка строки или столбца в заданном направлении.
Исходная ячейка не пустая и не крайняя внутри исходного заполненного диапазона в указанном направлении Последняя заполненная ячейка исходного заполненного диапазона в указанном направлении
Исходная ячейка не пустая, но в указанном направлении является крайней внутри исходного заполненного диапазона Первая заполненная ячейка следующего заполненного диапазона или, если в указанном направлении заполненных ячеек нет, последняя ячейка строки или столбца в заданном направлении.

Синтаксис

Expression.End (Direction)

Expression — выражение (переменная), представляющее объект Range.

Параметры

Параметр Описание
Direction Константа из коллекции XlDirection, задающая направление перемещения. Обязательный параметр.

Константы XlDirection:

Константа Значение Направление
xlDown -4121 Вниз
xlToLeft -4159 Влево
xlToRight -4161 Вправо
xlUp -4162 Вверх

Примеры

Скриншот области рабочего листа для визуализации примеров применения свойства Range.End:

Примеры возвращаемых ячеек свойством End объекта Range("C10") с разными значениями параметра Direction:

Выражение с Range.End Возвращенная ячейка
Set myRange = Range("C10").End(xlDown) Range("C16")
Set myRange = Range("C10").End(xlToLeft) Range("A10")
Set myRange = Range("C10").End(xlToRight) Range("E10")
Set myRange = Range("C10").End(xlUp) Range("C4")

Пример возвращения заполненной значениями части столбца:

Sub Primer()

Dim myRange As Range

Set myRange = Range(Range(«C10»), Range(«C10»).End(xlDown))

MsgBox myRange.Address  ‘Результат: $C$10:$C$16

End Sub


 

Доброе утро! :)  

  Требуется определить последний лист и записать его видом     Sheets(«Лист#последний»).Select.  

  Дело в том, что по результату работы макроса, может получиться последний лист12 или лист100500.  

  Если со строчками все понятно как определить, то как с листами?  

  Спасибо :)

 

{quote}{login=cbr}{date=17.10.2011 11:35}{thema=Оперирование с «последним листом». Как его найти?}{post}Доброе утро! :)  

  Требуется определить последний лист и записать его видом     Sheets(«Лист#последний»).Select.  

  Дело в том, что по результату работы макроса, может получиться последний лист12 или лист100500.  

  Если со строчками все понятно как определить, то как с листами?  

  Спасибо :){/post}{/quote}ъ  
Sheets(Sheets.Count).Select

 

Таким образом он берет лист с названием «Финальный», а не Лист»100500″.

 

{quote}{login=cbr}{date=17.10.2011 11:47}{thema=}{post}Таким образом он берет лист с названием «Финальный», а не Лист»100500″.{/post}{/quote}  
Вопрос был последний лист, если после всех листов, которые обрабатываются еще есть финальный то :  
Sheets(Sheets.Count-1).Select

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Тут еще вопрос, что считать последним листом. Крайний левый, последний созданный, содержащий в названии бОльшую цифру и т.д.

Я сам — дурнее всякого примера! …

 

Вот смотрите. В принципе теоретически как я понял должен подходить следующий код:  
   n = Sheets.Count  
   Sheets(«Лист» & n).Select  

  Но.  

  Листа всего ТРИ. но новый «последний» имеет название Лист23. А мы выбираем как я понимаю Sheets(«Лист3»).Select.    

  Поэтому и спрашиваю последний Лист, а не посчитать их. :)  

  Может правильнее будет выразиться самое большое значение из всех «Лист»‘ов.

 

KukLP, правильно выразился. Содержащий бОльшую цифру.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

Не морочьте людям голову: зайдите в VBA проект и в Project Explorer’е посмотрите какой лист у вас последний на самом деле. Это msgbox Sheets(sheets.Count).name и есть он (если в книге нет листов-диаграмм)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Public Function ExtractNumber#(s As String)  
   Dim i%, str$, d$  
   d = Mid(1 / 2, 2, 1)  
   For i = 1 To Len(s)  
       If InStr(1, «1234567890,.», Mid(s, i, 1)) <> 0 Then str = str & Mid(s, i, 1)  
   Next  
   str = IIf(d = «.», Replace(str, «,», «.»), Replace(str, «.», «,»))  
   If Not IsNumeric(str) Then ExtractNumber = 0: Exit Function  
   ExtractNumber = CDbl(str)  
End Function  

  Public Sub DelLastsheet()  
   Dim sh As Worksheet, i&, s$  
   For Each sh In Worksheets  
       If ExtractNumber(sh.CodeName) > i Then  
           i = ExtractNumber(sh.CodeName)  
           s = sh.Name  
       End If  
   Next  
   Application.DisplayAlerts = 0  
   Sheets(s).Delete  
   Application.DisplayAlerts = -1  
End Sub

Я сам — дурнее всякого примера! …

 

nerv, последний я и так вижу. мне не надо их считать.  

  KukLP, нифига себе. Сильно.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Но это все равно не выход. При следующем запуске и создании листа номерация не продолжится, если был удален не последний лист. Пронумерует первым свободным номером.

Я сам — дурнее всякого примера! …

 

Кстати, если последний лист скрыт, метод Sheets(Sheets.Count).Select вызовет ошибку. Найти последний нескрытый лист можно так:  

  Sub LastVisibleSheet()  
Dim i&  
For i = Sheets.Count To 1 Step -1  
   If Sheets(i).Visible = xlSheetVisible Then Sheets(i).Select: Exit For  
Next  
End Sub

 

Может просто..  
Sub q()  
ИмяЛиста = «Лист100500» ‘ваше имя по макросу  
ThisWorkbook.Sheets(Sheets.Count).Name = ИмяЛиста & » последний»  
End Sub

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

Так если эти листы генерятся макросом, так может просто писать их имена в публичную переменную. Так там всегда будет имя последнего листа — и доступно в любой момент.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

{quote}{login=Hugo}{date=17.10.2011 01:01}{thema=}{post}Так если эти листы генерятся макросом, так может просто писать их имена в публичную переменную. Так там всегда будет имя последнего листа — и доступно в любой момент.{/post}{/quote}См. мой пост от 17.10.2011, 12:20. Можно в свойствах книги сохранять имя последнего.

Я сам — дурнее всякого примера! …

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

{quote}{login=cbr}{date=17.10.2011 12:19}{thema=}{post}nerv, последний я и так вижу. мне не надо их считать.{/post}{/quote}  

  >>Название темы: Оперирование с «последним листом». Как его найти?  
>>В первом посте: Требуется определить последний лист  

  Стоят три кубика на столе, как определить какой из них первый, а какой последний? Тот, кот. по середине, явно «второй». Если считать справа-налево то одно, а если слева-на право, то другое.  

  >>Дело в том, что по результату работы макроса, может получиться последний лист12 или лист100500.  
Тем более, если создаете макросом, то и сами знаете, кот. последним будет.  

  22644

 

Так я говорю, что макрос обрабатывает файл. на основании этого файла он создает листы, листов может создать 1, может 101. Предлагаете анализировать этот файл, сколько он листов создаст и уже исходя из этого уже работать с высчитанным последним листом? не очень просто это.  

  Модифицировал макрос, теперь у нас есть один единственный лист с названием «Лист%какое-то число», других листов больше нет.    
Можно сделать Sheets(«Лист»&»%»).Select ?  

  так не работает :(

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

Один единственный лист?  
Sheets(1).Select  
Только зачем именно Select?  
Почему бы не написать так:  
Sheets(1).[A1]=»test string»
или  
переменная=Sheets(1).[A1].value

 

Видимо моё изъяснение понятно только мне :D  

  имеем три листа с названиями:  
1) финальный  
2) основной  
3) Лист##  

  больше листов нет. в данном наборе меняется только ## почти в рандоме.  

  Надо сделать Sheets(«Лист##»).Select/Activate/Delete не важно. вот как описать ## я не знаю :(

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

Если Вы точно не знаете, каким по счёту кладёт свой лист макрос (хотя это можно в макросе прописать  — класть в конец, или в начало, или перед последним листом), то например перебираем все листы книги, и в названии которого есть «Лист» — тот и нужен.  
А листы тут уже пару раз перебирали…

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

Public Sub www()  
Dim c As String  
y = 0  
For i = 1 To Sheets.Count  
   c = Sheets(i).Name  
   For t = 1 To Len© ‘перебираем имя листа по символам, например Лист12  
      If Mid(c, t, 1) Like «[0-9 ]» Then ‘- находим первый числовой символ — 1
           xx = Right(c, Len© — (t — 1)) * 1 ‘получаем номер листа 12  
           If xx > y Then y = xx ‘если этот номер листа больше предыдущего  
           Exit For  
      End If  
   Next t  
Next i  
Sheets(«Лист» & y & «»).Select  
End Sub  

    #35383#

 

спасибо, коллега!  

  Можно его с запасом на трехзнак переделать?  

  Когда мы удаляем найденный лист, макрос запрашивает разрешение на удаление, как можно принудительно разрешить удаление? :)

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

>>не очень просто это.  
Проще не куда. Даже если их номера создаться рандомом.  

  >>Может правильнее будет выразиться самое большое значение из всех «Лист»‘ов.  
При их создании запомнить и потом сразу к нему обратиться

 

{quote}{post}  
1)Можно его с запасом на трехзнак переделать?  
{/post}{/quote}  
12 чисто пример — если будет лист543 — сначала найдет 5 и возьмет все число до конца имени файла    
перевожу    
с — имя листа  
xx = Right(c, Len© — (t — 1)) * 1  
t — номер первого символа числа  
Len© — (t — 1) = длина строки минус (номер первого числа -1) =  
= длина числа (как раз определяется трех оно или двух или двенадцатизначное)  
xx = правсимв(имялиста, длина числа)*1  
умножаем на 1 чтоб эта величина числом была, а не строкой.  

  {quote}{post}  
2)Когда мы удаляем найденный лист, макрос запрашивает разрешение на удаление, как можно принудительно разрешить удаление? :){/post}{/quote}  

  перед строкой удаления  
application.displayalerts = false  
в конце макроса надо вернуть значение обратно  
application.displayalerts = true

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

э — не получилось правильно оформить сообщение :(

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#26

17.10.2011 18:16:18

{quote}{login=cbr}{date=17.10.2011 01:59}{thema=}{post}имеем три листа с названиями:  
1) финальный  
2) основной  
3) Лист##  
больше листов нет. в данном наборе меняется только ## почти в рандоме.({/post}{/quote}Если действительно всегда ТРИ листа, а «финальный» и «основной» всегда остаются после удаления других листов, то у последнего (третьего) всегда будет индекс =3. Тогда:  
Sheets(3).Activate

Выбрать первую пустую ячейку после таблицы

mikaelw

Дата: Вторник, 16.09.2014, 16:24 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 153


Репутация:

1

±

Замечаний:
0% ±


Excel 2010, 2013, 2016

Всем доброго времени суток!

Я пытаюсь изучить Ексель и VBA(надеюсь я пишу в правильный раздел).
«Удивительно, но подсел немного»

Прилагаю файл.

Задача:
После выполнения макроса нужно чтобы выбиралась ячейка в столбце А первая пустая(после таблицы).
Для определения ее использую переменную.
Думаю что проблема в этом.

З.Ы. посмотрите код может кто увидит еще косяки.

PPS. В файле таблицы исходники до выполнения макроса.

 

Ответить

alex1248

Дата: Вторник, 16.09.2014, 16:57 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

Замечаний:
0% ±


Excel 2007, 2010

mikaelw, наверное, так.
Только выбирается не первая пустая, а вторая, поскольку в первой в столбцах правее есть значения.


skype alex12481632
Qiwi +79276708519

 

Ответить

mikaelw

Дата: Вторник, 16.09.2014, 17:13 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 153


Репутация:

1

±

Замечаний:
0% ±


Excel 2010, 2013, 2016

Воп

Только выбирается не первая пустая, а вторая, поскольку в первой в столбцах правее есть значения.

Спасибо, но нужно выбирать именно 1-ую, тк итоги подведенные не нужно
следовательно: Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select

И вопрос все-таки в начало

В модуле пишу отформатировать ячейки диапазона от B2 до конца таблицы(в данном случае B41)

ActiveSheet.Range(«B2:B» & lLastRow).WrapText = True

а по факту форматирует на диапазоне B2:B46..

почему?

 

Ответить

alex1248

Дата: Вторник, 16.09.2014, 17:28 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

Замечаний:
0% ±


Excel 2007, 2010

mikaelw, попробуйте lLastRow рассчитывать таким образом:
[vba]

Код

lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

[/vba]


skype alex12481632
Qiwi +79276708519

Сообщение отредактировал alex1248Вторник, 16.09.2014, 17:29

 

Ответить

mikaelw

Дата: Вторник, 16.09.2014, 17:39 |
Сообщение № 5

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 153


Репутация:

1

±

Замечаний:
0% ±


Excel 2010, 2013, 2016

lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

Теперь он концом таблицы считает конец листа.

На команду
MsgBox (lLastRow)

выдает значение 65536(обрабатываю другой файл xls)

почему?

 

Ответить

alex1248

Дата: Вторник, 16.09.2014, 17:46 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

Замечаний:
0% ±


Excel 2007, 2010

Странно, у меня в окне Immediate при активном Sheet1 (2) выдает
? Cells(Rows.Count, 1).End(xlUp).Row
41

Посмотрю еще не спеша. <_<

P.S. И MsgBox lLastRow только что попробовал, тоже 41 выдало, правда, на следующем листе.


skype alex12481632
Qiwi +79276708519

Сообщение отредактировал alex1248Вторник, 16.09.2014, 17:47

 

Ответить

alex1248

Дата: Вторник, 16.09.2014, 17:52 |
Сообщение № 7

Группа: Проверенные

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

Замечаний:
0% ±


Excel 2007, 2010

Вот файл с макросом, 1-й лист обработан. Вроде, всё верно.


skype alex12481632
Qiwi +79276708519

 

Ответить

mikaelw

Дата: Вторник, 16.09.2014, 18:03 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 153


Репутация:

1

±

Замечаний:
0% ±


Excel 2010, 2013, 2016

странно!

Я MsgBox прямо в модуль после получения переменных добавил.
Новый файл

 

Ответить

mikaelw

Дата: Вторник, 16.09.2014, 18:08 |
Сообщение № 9

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 153


Репутация:

1

±

Замечаний:
0% ±


Excel 2010, 2013, 2016

Вот файл с макросом, 1-й лист обработан. Вроде, всё верно.
К сообщению приложен файл: 16092011622-112.xlsm(53Kb)

Перезапуск Екселя решил проблему!

 

Ответить

alex1248

Дата: Вторник, 16.09.2014, 18:10 |
Сообщение № 10

Группа: Проверенные

Ранг: Обитатель

Сообщений: 384


Репутация:

71

±

Замечаний:
0% ±


Excel 2007, 2010

странно!

Я MsgBox прямо в модуль после получения переменных добавил.

И что у вас получилось?
У меня вышли сообщения 41 и 1.

Ну всё, разобрались?


skype alex12481632
Qiwi +79276708519

Сообщение отредактировал alex1248Вторник, 16.09.2014, 18:11

 

Ответить

Gustav

Дата: Вторник, 16.09.2014, 18:44 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Спасибо, но нужно выбирать именно 1-ую, тк итоги подведенные не нужно
следовательно: Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select

На заметку на будущее. Вместо:
[vba]

Код

Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)

[/vba]
с тем же эффектом, но гораздо прозрачнее:
[vba]

Код

Cells(Rows.Count, 1).End(xlUp).Offset(1)

[/vba]
или
[vba]

Код

Cells(Rows.Count, «A»).End(xlUp).Offset(1)

[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavВторник, 16.09.2014, 18:48

 

Ответить

_Boroda_

Дата: Вторник, 16.09.2014, 18:53 |
Сообщение № 12

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

а по факту форматирует на диапазоне B2:B46..
почему?

Дело в том, что Вы поудаляли перед этим несколько строк. До удаления сочетание Контрл Енд (это Ваш xlLastCell) выделяло Вам ячейку Т46. После удаления строк все равно Контрл Енд будет выдавать Вам Т46. До того момента, пока Вы не обновите информацию файла о самом себе. Например

Перезапуск Екселя решил проблему!

А проще в коде перед строкой
lLastRow = …
написать строку
[vba][/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

mikaelw

Дата: Вторник, 16.09.2014, 21:19 |
Сообщение № 13

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 153


Репутация:

1

±

Замечаний:
0% ±


Excel 2010, 2013, 2016

Спасибо всем!

alex1248, за решение проблемы.
Gustav, за совет, что удивительно сегодня Walkenbach а именно про это читал…

_Boroda_ за ответ на вопрос почему?

 

Ответить

Alex_ST

Дата: Среда, 17.09.2014, 08:55 |
Сообщение № 14

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Для себя когда-то сделал шпаргалку с разными методами:
До сих пор иногда пользуюсь :)
(Прошу прощения, что не по примеру топик-стартера. У меня с работы собаки-сисадмины скачивание файлов с макросами запретили :( killed )



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STСреда, 17.09.2014, 09:00

 

Ответить

Like this post? Please share to your friends:
  • Миф excel глобальная переменная
  • Миф excel как создать лист
  • Миф excel выделить весь лист
  • Миф excel как скрыть строку
  • Миф excel выделенный диапазон