how do I check if the string variable is empty in vba?
if:
Dim StrFile1 As String, StrFile2 As String
Dim Text3 As String
Dim Len1 as Integer, Len2 As Integer
With NewMail
Text3 = Cells(i, 3).Value
StrPath = Cells(i, 2).Value & Text3
Text = Cells(i, 1).Value
.Subject =
' adds the data in column3 with space as subject
.From =
.To = Text
.BCC = ""
.TextBody =
StrFile1 = Dir(StrPath & "*.txt")
Len1 = Len(StrFile1)
Do While Len(StrFile1) > 0
.AddAttachment StrPath & StrFile1
StrFile1 = Dir
Loop
StrFile2 = Dir(StrPath & "*.pdf")
Len2 = Len(StrFile2)
Do While Len(StrFile2) > 0
.AddAttachment StrPath & StrFile2
StrFile2 = Dir
Loop
If (Len1 & Len2) = 0 Then
GoTo Last
'.AddAttachment Text3
.Send
End With
i = i + 1
Loop
Last:
End With
i = i + 1
Loop
Now i want to check simultaneously if Len1 and Len2 are 0, if so then I want to go to Last.
When I use this code I get a message/Compile error «Want to end with without with»
and
i am not sure if
If (Len1 & Len2) = 0 Then
GoTo Last
this is a proper code.
and Do i need to declare the label Last??
asked Jun 6, 2016 at 17:14
ShankShank
6633 gold badges9 silver badges21 bronze badges
4
You have many way to do that like below :
Dim StrFiles As String
StrFiles = Trim(StrFile1 & StrFile2)
If IsEmpty(StrFiles) Then
If StrFiles = vbNullString Then
If StrFiles = "" Then
If StrFiles = Empty Then
If Len(StrFiles) = 0 Then
you can use + operator
to check 2 strings are empty reference to your code, because Len Function
returns an integer containing either the number of characters in a string
If (Len1 + Len2) = 0 Then
answered Jun 6, 2016 at 17:28
Abdellah OUMGHARAbdellah OUMGHAR
3,6191 gold badge11 silver badges16 bronze badges
8
You can use Trim(strFile1 & vbNullString) = vbNullString
to check if the string is empty.
So:
If Trim(strFile1 & vbNullString) = vbNullString Then
Debug.print "Empty String!"
End If
Thanks to @LordPeter
answered Jun 6, 2016 at 17:20
BruceWayneBruceWayne
22.8k15 gold badges64 silver badges109 bronze badges
1
is.empty
doesn’t exist for VBA, but the second option works.
Alternatively, you can write:
(strFile1 & strFile2) = vbNullString
or
(strFile1 & strFile2) = ""
answered Jun 6, 2016 at 17:20
basodrebasodre
5,6801 gold badge14 silver badges22 bronze badges
Yet another way is:
If Len(strFile1 & strFile2) > 0 Then
I did test to ensure that strings which aren’t set return a length of 0, which appeared to be the case.
answered Jun 6, 2016 at 17:21
SoulfireSoulfire
4,21821 silver badges32 bronze badges
1
Проверить есть ли в строке данные
От: | Аноним | ||
Дата: | 15.03.05 06:55 | ||
Оценка: |
Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.
Re: Проверить есть ли в строке данные
От: |
Hades |
||
Дата: | 15.03.05 09:03 | ||
Оценка: |
Проверь длину строки, например…
Dim s As String
If (Len(s) <> 0) Then
MsgBox («Кулллл!»)
End If
s = «aaa»
или так:
If (s <> «») Then
MsgBox («Кулллл!»)
End If
Re[2]: Проверить есть ли в строке данные
От: | Аноним | ||
Дата: | 15.03.05 12:31 | ||
Оценка: |
Здравствуйте, Hades, Вы писали:
Строка — имеется в виду row, т.е. ячейки, расположенные на одинаковом горизонтальном уровне
Re: Проверить есть ли в строке данные
От: |
Unforgiver
|
||
Дата: | 15.03.05 12:54 | ||
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.
Включи обработчик ошибок:
On Error Resume Next
' Делаем операцию со строкой.
On Error Goto 0
Если строка пустая, то с ней ничего не сделается и выполнение пойдет дальше.
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Re[3]: Проверить есть ли в строке данные
От: |
Elena_
|
||
Дата: | 15.03.05 13:43 | ||
Оценка: |
4 (1) |
Здравствуйте, Аноним, Вы писали:
А>Строка — имеется в виду row, т.е. ячейки, расположенные на одинаковом горизонтальном уровне
Ну если по содержанию ячеек, то перебрать строки можно, например, так
Dim ranRow As Range
For Each ranRow In ActiveSheet.UsedRange.Rows
If Intersect(ranRow, ActiveSheet.UsedRange).Address = _
ranRow.SpecialCells(xlCellTypeBlanks).Address Then
MsgBox ranRow.row & " - Пустая Строка"
Else
MsgBox ranRow.row & " - Непустая Строка"
End If
Next ranRow
А по оформлению, может быть, нужно и смотреть оформление отдельно, надо подумать
Пользователь — друг программиста!
Re: Странные вы какие-то…
От: | Аноним | ||
Дата: | 16.03.05 12:32 | ||
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.
Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.
Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:
Option Explicit
Public Sub RowsCheck()
Dim clsRow As Excel.Range
Dim clsCell As Excel.Range
Dim clsActiveSheet As Excel.Worksheet
Dim blnEmpty As Boolean
Set clsActiveSheet = ActiveSheet
For Each clsRow In clsActiveSheet.Rows
blnEmpty = True
''''''''''''''''''''''''''''''''''''''
'Тут проверяешь каждую строку в листе.
For Each clsCell In clsRow.Cells
'''''''''''''''''''''''''''''''''''''''
'Тут проверяешь каждую ячейку в строке.
If Not VBA.IsEmpty(clsCell.Value) Then
blnEmpty = False
Exit For
End If
Next clsCell
If blnEmpty Then
Debug.Print "Row:""" & clsRow.Address & """ Is Empty"
Else
Debug.Print "Row:""" & clsRow.Address & """ Is Not Empty"
End If
Next clsRow
End Sub
PS: Задолбаетесь ждать, пока макрос отработает — жмите {Ctrl}+{Pause|Break}. Это я так, на всяк…
Re[2]: Странные вы какие-то…
От: |
Elena_
|
||
Дата: | 16.03.05 13:49 | ||
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.
А>Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:
А>
А> For Each clsRow In clsActiveSheet.Rows
А> blnEmpty = True
А> ''''''''''''''''''''''''''''''''''''''
А> 'Тут проверяешь каждую строку в листе.
А> For Each clsCell In clsRow.Cells
А> '''''''''''''''''''''''''''''''''''''''
А> 'Тут проверяешь каждую ячейку в строке.
А> If Not VBA.IsEmpty(clsCell.Value) Then
А> blnEmpty = False
А> Exit For
А> End If
А> Next clsCell
А>
Но зачем проверять даже те ячейки, которые не попали в UsedRange?
Зачем проверять каждую ячейку, если можно проверить сразу диапазон?
Пользователь — друг программиста!
От: | Аноним | ||
Дата: | 18.03.05 13:44 | ||
Оценка: |
Здравствуйте, Elena_, Вы писали:
E_>Но зачем проверять даже те ячейки, которые не попали в UsedRange?
E_>Зачем проверять каждую ячейку, если можно проверить сразу диапазон?
Согласен, но тогда «отмажусь» нехваткой времени ==> сыростью программы.
+ тут уже есть пример с использованием UserRange.
PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает…
От: |
Elena_
|
||
Дата: | 18.03.05 20:35 | ||
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает…
В общем-то, если пустых ячеек совсем нет, то действительно некорректно получается
Я имела в виду, чтобы не перебирать по ячейке, так как при больших объемах это все-таки будет заметно
Можно еще, например,
Dim ranRow As Range
For Each ranRow In ActiveSheet.UsedRange.Rows
If Application.WorksheetFunction.CountBlank(ranRow.EntireRow) = 256 Then
MsgBox ranRow.Row & " - Пустая Строка"
Else
MsgBox ranRow.Row & " - Непустая Строка"
End If
Next ranRow
Пользователь — друг программиста!
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Определение с помощью кода VBA Excel, что диапазон ячеек пуст, то есть, ни одна из ячеек диапазона (строки, столбца) не содержит отображаемого значения.
Определение пустого диапазона
Определить в VBA Excel, что диапазон ячеек пуст, можно с помощью функции рабочего листа WorksheetFunction.CountA или свойства диапазона ячеек Range.Text.
Пример 1
Определение, что диапазон ячеек пуст, с помощью функции рабочего листа WorksheetFunction.CountA:
Sub Primer1() If WorksheetFunction.CountA(Range(«A1:L8»)) = 0 Then MsgBox «Диапазон ячеек ««A1:L8»» пуст» Else MsgBox «Диапазон ячеек ««A1:L8»» не пуст» End If End Sub |
Функция WorksheetFunction.CountA подсчитывает количество ячеек, содержащих значения, в том числе нули и формулы, возвращающие пустые строки. Если хотя бы одна ячейка в диапазоне будет содержать пустую строку, возвращенную формулой, то код первого примера определит, что диапазон не пуст.
Пример 2
Определение, что диапазон ячеек пуст, с помощью свойства Text объекта Range:
Sub Primer2() If Range(«A1:L8»).Text = «» Then MsgBox «Диапазон ячеек ««A1:L8»» пуст» Else MsgBox «Диапазон ячеек ««A1:L8»» не пуст» End If End Sub |
Свойство Text объекта Range возвратит пустую строку только в том случае, если все ячейки диапазона будут содержать пустые строки и (или) значение Empty. Если одна или более ячеек в диапазоне будут содержать пустую строку, возвращенную формулой, то код второго примера все-равно определит, что диапазон пуст.
Определение пустой строки
Определение пустой строки в VBA Excel с помощью свойства Range.Text:
Sub Primer3() If Rows(5).Text = «» Then MsgBox «Указанная строка пуста» Else MsgBox «Указанная строка не пуста» End If End Sub |
Данное определение пустой строки используется в коде для удаления пустых строк из таблицы.
Определение пустого столбца
Определение пустого столбца в VBA Excel с помощью свойства Range.Text:
Sub Primer4() If Columns(7).Text = «» Then MsgBox «Указанный столбец пуст» Else MsgBox «Указанный столбец не пуст» End If End Sub |
или
Sub Primer5() If Columns(«G»).Text = «» Then MsgBox «Указанный столбец пуст» Else MsgBox «Указанный столбец не пуст» End If End Sub |
Фразы для контекстного поиска: диапазон пустой, строка пустая, столбец пустой.
Содержание
- Vba excel определить пустую строку
- Функция IsNull
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
- IsNull function
- Syntax
- Remarks
- Example
- See also
- Support and feedback
- Vba excel определить пустую строку
Vba excel определить пустую строку
Проверь длину строки, например.
Dim s As String
If (Len(s) <> 0) Then
MsgBox («Кулллл!»)
End If
If (s <> «») Then
MsgBox («Кулллл!»)
End If
От: | Аноним | |
Дата: | 15.03.05 12:31 | |
Оценка: |
Здравствуйте, Hades, Вы писали:
Строка — имеется в виду row, т.е. ячейки, расположенные на одинаковом горизонтальном уровне
От: | Unforgiver | |
Дата: | 15.03.05 12:54 | |
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.
Включи обработчик ошибок:
Если строка пустая, то с ней ничего не сделается и выполнение пойдет дальше.
От: | Elena_ | |
Дата: | 15.03.05 13:43 | |
Оценка: | 4 (1) |
Здравствуйте, Аноним, Вы писали:
А>Строка — имеется в виду row, т.е. ячейки, расположенные на одинаковом горизонтальном уровне
Ну если по содержанию ячеек, то перебрать строки можно, например, так
А по оформлению, может быть, нужно и смотреть оформление отдельно, надо подумать
От: | Аноним | |
Дата: | 16.03.05 12:32 | |
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.
Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.
Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:
PS: Задолбаетесь ждать, пока макрос отработает — жмите +. Это я так, на всяк.
От: | Elena_ | |
Дата: | 16.03.05 13:49 | |
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.
А>Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:
А>
Но зачем проверять даже те ячейки, которые не попали в UsedRange?
Зачем проверять каждую ячейку, если можно проверить сразу диапазон?
От: | Аноним | |
Дата: | 18.03.05 13:44 | |
Оценка: |
Здравствуйте, Elena_, Вы писали:
E_>Но зачем проверять даже те ячейки, которые не попали в UsedRange?
E_>Зачем проверять каждую ячейку, если можно проверить сразу диапазон?
Согласен, но тогда «отмажусь» нехваткой времени ==> сыростью программы.
+ тут уже есть пример с использованием UserRange.
PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает.
От: | Elena_ | |
Дата: | 18.03.05 20:35 | |
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает.
В общем-то, если пустых ячеек совсем нет, то действительно некорректно получается
Я имела в виду, чтобы не перебирать по ячейке, так как при больших объемах это все-таки будет заметно
Источник
Функция IsNull
Возвращает значение типа Boolean, которое указывает, не содержит ли выражение достоверных данных (Null).
Синтаксис
IsNull(выражение)
Замечания
IsNull возвращает значение True (Истина), если используется expression равное Null; в другом случае IsNull возвращает значение False (Ложь). Если expression состоит из нескольких переменных, значение Null, заданное для одной из них, приводит к возврату значения True для всего выражения.
Значение Null указывает, что Variant не содержит достоверных значений. Null не приравнивается к значению Empty (Пусто), которое указывает, что переменная не была инициализирована. Это также не то же самое, что строка нулевой длины («»), которую иногда называют пустой строкой.
Используйте функцию IsNull, чтобы определить, содержит ли выражение значение Null. Выражения, для которых может потребоваться значение True , в некоторых случаях, например If Var = Null и If Var <> Null , всегда имеют значение False. Это связано с тем, что любое выражение, содержащее значение NULL , само по себе имеет значение NULL и , следовательно, false.
Пример
В этом примере используется функция IsNull, чтобы определить, содержит ли переменная значение Null.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
IsNull function
Returns a Boolean value that indicates whether an expression contains no valid data (Null).
Syntax
IsNull(expression)
IsNull returns True if expression is Null; otherwise, IsNull returns False. If expression consists of more than one variable, Null in any constituent variable causes True to be returned for the entire expression.
The Null value indicates that the Variant contains no valid data. Null is not the same as Empty, which indicates that a variable has not yet been initialized. It’s also not the same as a zero-length string («»), which is sometimes referred to as a null string.
Use the IsNull function to determine whether an expression contains a Null value. Expressions that you might expect to evaluate to True under some circumstances, such as If Var = Null and If Var <> Null , are always False. This is because any expression containing a Null is itself Null and therefore False.
Example
This example uses the IsNull function to determine if a variable contains a Null.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Vba excel определить пустую строку
Бывалый
Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород
Репутация: нет
Всего: 1
скажите кто-нибудь, пожалуйста, почему не работает
kb-nn |
|
||
Код |
Function get_first_empty_row() As Integer Dim bool As Boolean For i = 1 To 65535 bool = True For j = 1 To 256 If Trim(ThisWorkbook.ActiveSheet.Cells(j, i).Value) <> «» Then bool = False End If Next j If bool = True Then get_first_empty_row = i End If Next i If bool = False Then get_first_empty_row = 0 End If End Function |
mihanik |
|
||
-=Белый Медведь=- Профиль Репутация: 9 А вот это работает?
For MyRow = 1 To 65535 For MyCol = 1 To 256 If bool = False Then Exit For |
|||
|
Советчик
Профиль
Группа: Модератор
Сообщений: 20553
Регистрация: 8.4.2004
Где: Зеленоград
Репутация: 25
Всего: 453
Akina |
|
||
Код |
Sub Show_First_Empty_Row() Dim i As Long Dim j As Long For i = 1 To 65535 For j = 1 To 255 If Not IsEmpty(ThisWorkbook.ActiveSheet.Cells(i, j)) Then j = 0 Exit For End If Next j If j Then Exit For Next i MsgBox i End Sub |
О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.
Шустрый
Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007
Репутация: 1
Всего: 1
bilya |
|
||
Код |
iRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count |
Бывалый
Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород
Репутация: нет
Всего: 1
большое спасибо. окаазывается, я перепутал строки со столбцами и в Integer попытался втиснуть long.
извините пожалуйста.
но проблема оказалась другой.
надо не первую пустую строку, а последнюю занятую строку.
вариант, приведенный bilya, делает нечто подобное, но все строки, которые чначала были заняты, а потом очищены, считаются занятыми.
можно ли как нибудь узнать последнюю занятую строку (на момент запуска макроса)?
только не проверяя всё подряд. это неинтересно.
kb-nn |
|
||
|
Советчик
Профиль
Группа: Модератор
Сообщений: 20553
Регистрация: 8.4.2004
Где: Зеленоград
Репутация: 25
Всего: 453
Нет такого понятия как «Незанятая ячейка (строка, столбец)». Следует понимать что одно дело — скажем пустая строка, и совсем другое — отсутствие строки в принципе (Null). Вариант bilya дает как раз Null-ячейки, в то время как тебе нужны и «»-ячейки. И вот тут без сканирования ну никуда.
Akina |
|
||
Цитата(kb-nn @ 25.7.2007, 17:51 ) |
надо не первую пустую строку, а последнюю занятую строку. |
О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.
Шустрый
Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007
Репутация: 1
Всего: 1
bilya |
|
||
Цитата(kb-nn @ 25.7.2007, 16:51 ) |
но все строки, которые чначала были заняты, а потом очищены, считаются занятыми. |
Код |
MsgBox ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count — 1 |
Код |
MsgBox Cells(Rows.Count, «A»).End(xlUp).Row |
Бывалый
Профиль
Группа: Участник
Сообщений: 227
Регистрация: 23.12.2003
Где: Нижний Новгород
Репутация: нет
Всего: 1
kb-nn |
|
||
|
Шустрый
Профиль
Группа: Участник
Сообщений: 108
Регистрация: 9.5.2006
Репутация: нет
Всего: 2
НеуФазендник |
|
||
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Несанкционированная реклама на форуме запрещена
- Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль «Помогите!» таковым не является.
- Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
- Оставляйте свои записи в «Книге отзывов о работе администрации»
- А вот тут лежит FAQ нашего подраздела
Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.
Правила форума «Программирование, связанное с MS Office» |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
[ Время генерации скрипта: 0.1192 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Источник
Adblock
detector
Михаил, гляньте, как это делается в макросе удаления пустых строк:
Sub DeleteEmptyRows()
‘—————————————————————————————
‘ Procedure : DeleteEmptyRows
‘ Author : The_Prist???
‘ Topic_HEADER : Удаление всех пустых строк в таблице
‘ Topic_URL :
http://www.planetaexcel.ru/tip.php?aid=31
‘ Post_Author :
‘ Post_URL :
‘ DateTime : 10.09.2006
‘ Purpose : Удаление всех пустых строк в таблице
‘ Notes :
‘—————————————————————————————
If MsgBox(«Удалить все пустые строки на листе?», vbOKCancel Or vbQuestion Or vbDefaultButton1, «Удалить пустые строки?») = vbCancel Then Exit Sub
Dim lLastRow As Long, i As Long
lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False
For i = lLastRow To 1 Step -1
If Application.CountA(Rows(i)) = 0 Then Rows(i).Delete
Next
Application.ScreenUpdating = True
End Sub