PDA

Vollständige Version anzeigen : Null wert übergabe verhindern


Peter9
17.03.2009, 09:27
Hallo An alle

ich benötige mal informationen für eine Null Wert übergabe.

also als beispiel hole ich aus einer geschlossen Mappe aus einer Zelle denn inhalt

wenn keine inhalt drin ist wird mir eine Null als Ziffer über geben wie kann ich das verhindern.

und wenn eine Null drin ist solte sie angezeigt werden

Danke Gruss Peter9


arbeite gerade mit
Win 2000 Office 2000

Madrapour
17.03.2009, 09:45
Hallo Peter,

ich würd's ganz simpel mit einer If-Abfrage machen...


...
Range("A1").Select
If Selection = "" Then MsgBox "Keine Übergabe"
...


Stefan

Peter9
17.03.2009, 09:53
Hallo Stefan,

danke für die schnelle Antwort

Probier es mal mit dem Code


Sub DatenAusGeschlossenerMappeAuslesen()
Dim nn As String
Dim strPfad As String, strDatei As String, strTabelle As String, strZelle As String

strPfad = "c:\XXX\" ' Pfad mit \ am Ende
strDatei = "Achenbachstr.xls" ' Name der Datei
strTabelle = "Tabelle1"
strZelle = "R5C18" ' Zelle --> R = Row, C = Column (im Beispiel Zelle R5)
'Etwas einfachere Handhabung der Zelladresse :
'strZelle = [B10].address(1,1,0,0) 'Zelle B10 auslesen

nn = Application.ExecuteExcel4Macro("'" & strPfad & "[" & strDatei & "]" & strTabelle & "'!" & strZelle)
'MsgBox Application.ExecuteExcel4Macro("'" & strPfad & "[" & strDatei & "]" & strTabelle & "'!" & strZelle)

End Sub


gruss Peter9

Madrapour
17.03.2009, 10:25
Hallo Peter,

hatte überlesen, dass es aus einer ungeöffneten Datei ausgelesen werden soll...

Ich teste mal weiter.

Gruß Stefan.

Peter9
17.03.2009, 10:31
Hallo Stefan,

also folgendes

wenn die Zelle in der geschlossenen Mappe leer ist wird mir einer Ziffer Null = "0"

ausgegeben

mit dem kann ich das nicht machen da es auch reale Null eingaben als Ziffer gibt

If nn = "*" then

vielleicht solltest du das script mal ausprobieren


Danke gruss Peter

Madrapour
17.03.2009, 13:19
Hallo Peter,

sorry dass ich mich vorhin etwas "verlesen" habe.

Leider bin ich bei deinem Problem auch mit meinem Latein am Ende. Vielleicht kann aber jemand den folgenden Ansatz weiterverfolgen.

Mit dem XLM-Befehl
nn = ExecuteExcel4Macro("GET.CELL(5, Tabelle1!R1C1)")
liest man den Inhalt einer Zelle aus, dabei kann man auch auf ein anderes Worksheet in der gleichen Arbeitsmappe verweisen. Wie man jedoch mit diesem Befehl den Zellinhalt einer ungeöffneten Arbeitsmappe ausliest, konnte ich nicht herausfinden. Und die "0" lässt sich nach wie vor nicht verhindern... :-(

Viel Erfolg noch, vielleicht weiß jemand anders weiter.

Stefan.

P.S.: Bin auch sehr an einer Lösung interessiert, da ich ebenfalls mit diesem Befehl arbeite...

IngGi
17.03.2009, 19:46
Hallo Peter,

erst mit ANZAHL2 (englisch COUNTA) prüfen:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> DatenAusGeschlossenerMappeAuslesen()
<span class="TOKEN">Dim</span> nn <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> strPfad <span class="TOKEN">As</span> String, strDatei <span class="TOKEN">As</span> String, strTabelle <span class="TOKEN">As</span> String, strZelle <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
strPfad = &quot;c:\XXX\&quot; <span class="REM">' Pfad mit \ am Ende</span>
strDatei = &quot;Achenbachstr.xls&quot; <span class="REM">' Name der Datei</span>
strTabelle = &quot;Tabelle1&quot;
strZelle = &quot;R5C18&quot; <span class="REM">' Zelle --&gt; R = Row, C = Column (im Beispiel Zelle R5)</span>
<span class="REM"> 'Etwas einfachere Handhabung der Zelladresse :</span>
<span class="REM"> 'strZelle = [B10].address(1,1,0,0) 'Zelle B10 auslesen</span>
&nbsp;
<span class="TOKEN">If</span> Application.ExecuteExcel4Macro(&quot;CountA('&quot; &amp; strPfad &amp; &quot;[&quot; &amp; strDatei &amp; &quot;]&quot; _
&amp; strTabelle &amp; &quot;'!&quot; &amp; strZelle &amp; &quot;)&quot;) <span class="TOKEN">Then</span>
&nbsp;
nn = Application.ExecuteExcel4Macro(&quot;'&quot; &amp; strPfad &amp; &quot;[&quot; &amp; strDatei &amp; &quot;]&quot; _
&amp; strTabelle &amp; &quot;'!&quot; &amp; strZelle)
<span class="TOKEN">Else</span>
nn = &quot;&quot;
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="REM"> 'MsgBox Application.ExecuteExcel4Macro(&quot;'&quot; &amp; strPfad &amp; &quot;[&quot; &amp; strDatei &amp; &quot;]&quot; &amp; strTabelle &amp; &quot;'!&quot; &amp; strZelle)</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

Madrapour
18.03.2009, 08:48
Hallo Ingolf,

die Lösung funktioniert super, danke! Ich habe aber zum Verständnis noch eine Frage:

Der CountA-Befehl gibt mir, wenn die Zelle einen Inhalt hat, eine 1 zurück, ansonsten eine Null. Soweit klar. Bedeutet denn deine If-Abfrage somit, dass, wenn eine Null zurückgegeben wird, die Bedingung nicht erfüllt ist und er somit das Else-Ereignis durchführt? Sprich, warum muss nicht unbedingt noch ein "> 0" in der If-Abfrage stehen?

Gruß,

Stefan.

Edit: Und nochwas zum Verständnis: Macht es einen Unterschied, ob ich schreibe
"Application.Execute..." oder nur "Execute..."? Funktioniert ja beides...

IngGi
18.03.2009, 09:20
Hallo Stefan,

in VBA entspricht 0 dem Wahrheitswert FALSCH und -1 dem Wahrheitswert WAHR. Die Codezeile i=5+(1=1) ergibt daher 4 in der Variablen i, da VBA für den Teil (1=1) den Wahrheitswert WAHR und damit -1 zurückgibt. Umgekehrt wird 0 immer als FALSCH und jeder andere Wert als WAHR interpretiert.

Bei ExecuteExcel4Macro spielt es keine Rolle, ob du ein Application davorstellst oder nicht. Das gilt aber nicht für alle Methoden. InputBox und Application.InputBox unterscheiden sich zum Beispiel voneinander!

Gruß Ingolf

Madrapour
18.03.2009, 09:32
Ingolf, vielen Dank. Da hab ich doch gleich wieder was gelernt... :cool:

Peter9
18.03.2009, 16:50
Hallo Ingolf,

danke auf dem ANZAHL2 (englisch COUNTA) bin ich nicht gekommen

aber funkt super habe das mit "else" raus genommen bei mir sieht es jetzt so aus



Sub DatenAusGeschlossenerMappeAuslesen()

Dim strPfad As String, strDatei As String, strTabelle As String, strZelle As String

strPfad = "D:\Websites\Spandau-2008\Strassen-Listen-Excel\" ' Pfad mit \ am Ende
strDatei = "Achenbachstr.xls" ' Name der Datei
strTabelle = "Tabelle1"
strZelle = "R5C18" ' Zelle --> R = Row, C = Column (im Beispiel Zelle A1)
'Etwas einfachere Handhabung der Zelladresse :
'strZelle = [B10].address(1,1,0,0) 'Zelle B10 auslesen

If Application.ExecuteExcel4Macro("CountA('" & strPfad & "[" & strDatei & "]" _
& strTabelle & "'!" & strZelle & ")") Then: _
nn = Application.ExecuteExcel4Macro("'" & strPfad & "[" & strDatei & "]" _
& strTabelle & "'!" & strZelle)
[A1] = nn ' Beispiel in Zelle A1
MsgBox nn

'MsgBox Application.ExecuteExcel4Macro("'" & strPfad & "[" & strDatei & "]" & strTabelle & "'!" & strZelle)
End Sub




Danke Gruss Peter9