Nie wiem, czy to możliwe, ale chcę sprawdzić, czy zakres w Excelu jest pusty. Jak więc napisać, jeśli:Excel Visual Basic - wykryj, czy zakres jest pusty
Range("A38":"P38")
Czy jest pusty w kodzie VBA?
Z góry dziękuję.
Nie wiem, czy to możliwe, ale chcę sprawdzić, czy zakres w Excelu jest pusty. Jak więc napisać, jeśli:Excel Visual Basic - wykryj, czy zakres jest pusty
Range("A38":"P38")
Czy jest pusty w kodzie VBA?
Z góry dziękuję.
Znaleziono rozwiązanie z komentarzy, które dostałem.
Sub Empty()
If WorksheetFunction.CountA(Range("A38:P38")) = 0 Then
MsgBox "Empty"
Else
MsgBox "Not Empty"
End If
End Sub
Uwaga: ** "Empty()" ** nie jest prawidłową procedurą Name. @ darren-bartrup-cook, proponowana przeze mnie redakcja nie odbiega od pierwotnej intencji postu i zachowuje swoje cele. –
Dim M As Range
Set M = Selection
If application.CountIf(M, "<>0") < 2 Then
MsgBox "Nothing selected, please select first BOM or Next BOM"
Else
'Your code here
End If
Z doświadczenia Właśnie dowiedziałem można zrobić:
If Selection.Rows.Count < 2
Then End If`
Wyjaśnienie, które należy dostarczyć nieco później (teraz pracuję)
Dzięki za odpowiedź, czy mógłbyś podać nieco wyjaśnienia, co porównanie naprawdę robi dla przyszłych użytkowników? EDYCJA: Również trochę trudny do zrozumienia, w jaki sposób twoja edycja pasuje do oryginalnego przykładu. – Thor
@ Tora, gdy szukasz rozwiązania problemu w Google, otrzymasz tę stronę. Ale ta strona nie odpowiada na ten problem, dlatego właśnie odpowiedziałem na ten problem. Uważam, że ludzie tutaj nie tylko głosują w górę. Widzę, że pomogło już kilku osobom. – DeerSpotter
Nadal pracujesz? –
IsEmpty zwraca True jeśli zmienna jest niezainicjowana lub jest jawnie ustawiona na Empty; w przeciwnym razie zwraca False. Fałsz jest zawsze zwracany, jeśli wyrażenie zawiera więcej niż jedną zmienną. IsEmpty zwraca tylko ważne informacje dotyczące wariantów. (https://msdn.microsoft.com/en-us/library/office/gg264227.aspx). Więc trzeba sprawdzić każdą komórkę w zakresie oddzielnie:
Dim thisColumn as Byte, thisRow as Byte
For thisColumn = 1 To 5
For ThisRow = 1 To 6
If IsEmpty(Cells(thisRow, thisColumn)) = False Then
GoTo RangeIsNotEmpty
End If
Next thisRow
Next thisColumn
...........
RangeIsNotEmpty:
Oczywiście są tu więcej kodu niż w roztworze z funkcją COUNTA które nie liczą się puste komórki, ale GoTo może interupt pętle jeśli przynajmniej jedna pusta komórka znajduje się i wykonaj kod szybciej, szczególnie jeśli zasięg jest duży i musisz wykryć tę sprawę. Również ten kod jest dla mnie łatwiejszy do zrozumienia, co robi, niż z funkcją Excel CountA, która nie jest funkcją VBA.
Kod makr programu Excel (nie wiem, czy kompilowanie jest możliwe) trwa długo, gdy masz dużą liczbę iteracji. Twoje rozwiązanie jest potrzebne, jeśli już ustaliłeś, że jakaś komórka w tym zakresie nie jest pusta i chcesz ją przetworzyć, ale sprawdzenie, czy zakres jest pusty (tj. Czy twój kod jest niezbędny) powinno być szybsze i może znacznie szybciej, używając zaakceptowanej odpowiedzi (CountA).Używanie pojedynczej "natywnej" funkcji w pętli VB, co prowadzi do tego, że prowadzi do szybszego czasu pracy. –
to nie zawsze działa. Na przykład, jeśli masz zasięg, który nie jest ciągłym wyborem po selekcji (powiedzmy, że wybór zakresu pomija 1 komórkę, to pomija 5 komórek, wraca do 1 komórki, itp.), To spowoduje to błąd. – DeerSpotter
Kolejne możliwe rozwiązanie. Policz puste komórki i odejmij tę wartość od łącznej liczby komórek.
Sub Emptys()
Dim r As range
Dim totalCells As Integer
'My range To check'
Set r = ActiveSheet.range("A1:B5")
'Check for filled cells'
totalCells = r.Count- WorksheetFunction.CountBlank(r)
If totalCells = 0 Then
MsgBox "Range is empty"
Else
MsgBox "Range is not empty"
End If
End Sub
Sprawdź interfejs API (jest to PIA, ale model COM używany w VBA powinien być podobny): http://msdn.microsoft.com /pl-pl/library/microsoft.office.interop.excel.range_members.aspx (właściwość Counta, być może) –
Jestem całkiem nowy dla VBA, więc nie ma to dla mnie większego sensu :) – Kano
'Range ("A38: P38"). Count ", zobacz http://msdn.microsoft.com/en-us/library/aa139976%28v=office.10%29.aspx –