Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Exceldatei erweitern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
Autor Thema:  Exceldatei erweitern (2104 mal gelesen)
InesP
Mitglied



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 04. Dez. 2006 22:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich steh mal wieder auf dem Schlauch.
Ich habe eine UserForm mit Textfeld. Den in dieses Feld eigetragenen Text sende ich an eine Exceltabelle. So weit, so gut. Nun soll das Programm aber selbständig die letzte gefüllte Zeile (z.B. A5) erkennen und dann diesen Text ins Feld A6 schreiben. Bei der nächsten Programmabarbeitung wäre also A6 gefüllt und der betreffende Text müßte in A7 geschrieben werden. Dafür gibt es bestimmt eine ganz einfache Abfrage, oder? Ich sag schon mal danke und Euch allen noch einen schönen Abend!
Gruß Ines

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Widmann
Mitglied
ATHENA Support/Training


Sehen Sie sich das Profil von Andreas Widmann an!   Senden Sie eine Private Message an Andreas Widmann  Schreiben Sie einen Gästebucheintrag für Andreas Widmann

Beiträge: 218
Registriert: 24.08.2005

erstellt am: 04. Dez. 2006 23:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

Hallo Ines

In Excel heißt der Befehl so:
msgbox excel.cells.SpecialCells(xlCellTypeLastCell).Address
und der gibt dir die Addresse der letzten Zelle aus (z.B. "$A$5")

Bin leider schon zu  und hab deswegen keinen ACAD-Code damit hingekriegt, musst halt n bisschen experimentieren 

Viel Glück!

------------------
Mfg Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 04. Dez. 2006 23:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

Hallo auch,

specialCells geniesse ich immer bisserl mit Vorsicht;-)
Ich ermittele die letzte belegte Zeile in A ZB so:

Code:

Sub x()
Dim i&
i = Cells(Rows.Count, 1).End(xlUp).Row
Debug.Print i
End Sub


Je nach Anforderung und Umgebung schaut das sicher anders aus,
nur mal auch prinzipiell im nativen Excel, bezogen auf das aktive Sheet, die nächste freie zelle in Spalte A wäre denne cells(i+1,1);-)

Grüsse, Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InesP
Mitglied



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 05. Dez. 2006 08:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Nancy, Hallo Andreas,
vielen Dank für Eure schnelle Hilfe. Ihr schlaft wohl vor dem Computer, zumindest entsteht der Eindruck, wenn ich mir Eure Antwortzeiten anschaue. Ich ziehe jedenfalls den Hut vor Euch. Eure Tipps werde ich etwas später ausprobieren, wenn es hier im Büro etwas ruhiger geworden ist. Ich melde mich wieder.
Gruß Ines

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InesP
Mitglied



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 06. Dez. 2006 11:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
da bin ich wieder. Gestern war es etwas stressig im Büro, deshalb konnte ich erst heute den Code ausprobieren. Leider bin ich nicht sehr weit gekommen, wahrscheinlich fehlen mir noch elementare VBA-Grundkenntnisse.
Andreas, bei Deinem Code bin ich überhaupt nicht dahintergestiegen, was die einzelnen Bausteine (SpecialCells, xlCellTypeLastCell usw.) bedeuten. Ist da irgendwo eine Pfadangabe versteckt, die ich anpassen muss?
Nancy, bei Deinem Code brachte mir das Programm Fehlermeldungen bezüglich xlUp, Rows. Bezieht sich Cells auf das aktive Workbook und muß ich das statt Cells angeben.
Bitte helft mir, ich seh den Wald vor lauter Bäumen nicht!
Gruß Ines

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 06. Dez. 2006 19:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

Hallo Ines,
Zitat:
Original erstellt von InesP:
.... Den in dieses Feld eigetragenen Text sende ich an eine Exceltabelle. ...

Wie machst du das denn mit dem senden ?

Kopier doch mal den Code in den Thread. Dann kann man besser sehen wie es bei dir weiter gehen kann.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InesP
Mitglied



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 06. Dez. 2006 21:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stelli,
hier mal paar Codeschnipsel:

Dim XL1 As Object      ' Variable für Verweis auf Excel-Datei
Dim XLProg As Object    ' Variable für Verweis auf Excel-Applikation
Dim z As Integer
Dim s As Integer

On Local Error Resume Next

z = 1
s = 1

Set XLProg = CreateObject("excel.application")
Set XL1 = XLProg.Workbooks.Open("C:\Kommentar.xls")

XL1.Worksheets(1).cells(z, s) = UserForm1.Kommentar

XLProg.Quit            'Excel-Programm beenden
Set XL1 = Nothing      'Verweis auf Tabelle freigeben
Set XLProg = Nothing    'Verweis auf Anwendung freigeben

So wie es bis jetzt ist, wird der Text immer in Zelle A1 geschrieben. Ist ja auch logisch, da z und s =1 sind. Beim nächsten Programmaufruf (also auch, wenn der Computer zwischendurch aus war) soll das Programm aber automatisch ermitteln, das in Zelle A1 bereits was drinsteht und den nächsten Text also in Zelle A2 ablegen. Deshalb meine Frage nach einer Abfrage der Excelzellen. Leider habe ich weder Nancy's noch Andreas Code verstanden, um ihre Hilfe nachvollziehen zu können.
Gruß Ines

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 07. Dez. 2006 11:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

Hallo Ines,

bin auch nicht der Excel Spezi.
Ich untersuche einfach in einer Schleife ob was in der Zelle steht.
Wähle doch mal unter Projekt/Verweise Microsoft Excel aus. Dann kannst du die Methoden und EIgenschaften der Excelobjekte kontexsensitiv eingeben.

Code:
Option Explicit

Private Sub CommandButton1_Click()
    Dim ExcelApp As Excel.Application
    Dim ExcelWorkbook As Excel.Workbook
    Dim ExcelSheet As Excel.Worksheet
   
    Dim Zeile As Long
    Dim Datei As String
    Dim DateiOffen As Boolean
   
    Datei = "C:\TEMP\TEST.XLS"
   
    On Error Resume Next
    ' Versuch eine laufende ExcelInstanz zu finden
    Set ExcelApp = GetObject(, "Excel.application")
    If Err.Number > 0 Then
        ' Excel neu Starten
        Set ExcelApp = CreateObject("Excel.application")
        ExcelApp.visible=true
    End If
    On Error GoTo 0
   
    For Each ExcelWorkbook In ExcelApp.Workbooks
        If UCase(ExcelWorkbook.FullName) = Datei Then
            DateiOffen = True
            Exit For
        End If
    Next ExcelWorkbook

    If DateiOffen = False Then
        ' Wenn noch nicht geladen dann Datei öffnen
        ' Datei muss vorhanden sein !
        ' Ansonsten brauchst du eine Fehlerbehandlung
        Excel.Application.Workbooks.Open Datei
        Set ExcelWorkbook = Excel.Application.ActiveWorkbook
    End If
   
    '1. Worksheet aktivieren
    Set ExcelSheet = ExcelWorkbook.Sheets(1)
   
    ' Letzten Eintrag in Spalte A finden
    Do
        Zeile = Zeile + 1
    Loop While ExcelSheet.Cells(Zeile, 1) <> ""

   
    ExcelSheet.Cells(Zeile, 1) = Me.TextBox1.Text
   
End Sub



Versuchs mal so.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Dez. 2006 12:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

Hallo Ines,

Zitat:
Original erstellt von InesP:

Nancy, bei Deinem Code brachte mir das Programm Fehlermeldungen bezüglich xlUp, Rows. Bezieht sich Cells auf das aktive Workbook und muß ich das statt Cells angeben.

ups, du verwendest late Binding, deswegen kennt dein VBA die excelinterne Konstante xlup nicht:

Const xlUp = -4162 (&HFFFFEFBE)
    Element von Excel.XlDirection

dies sagt der Objektkatalog in Excel, du müsstest also xlup erstmal explicit definieren, sonst kann Acad/VBA damit überhaupt nix anfangen.

Oder aber du verwendest, wie Stelli schon vorschlug, die 'frühe' Bindung, indem du Dir einen Verweis auf M$ Excel x.x Bibo setzt.
Damit kennt dann auch Acad/VBA das excelige xlup und noch ein paar andere Nettigkeiten;-)

Die letzte belegte Zeile in A müsste sich dann so in etwa widergeben lassen, ich nehm' mal Stellis Code als Basis dann hiesse es dort statt Do Loop so:

Code:

' Letzten Eintrag in Spalte A finden
   
    Zeile = excelsheet.Cells(Rows.Count, 1).End(xlUp).Row
 
    ExcelSheet.Cells(Zeile, 1) = Me.TextBox1.Text

Oder aber mit late Binding in etwa so:

Code:

Sub stelliCodeLateBinding()
    Dim ExcelApp As Object
    Dim ExcelWorkbook As Object
    Dim ExcelSheet As Object
    Const xlup = -4162
 
    Dim Zeile As Long
    Dim Datei As String
    Dim DateiOffen As Boolean
 
    Datei = "d:\Mappe1.XLS"
 
    On Error Resume Next
    ' Versuch eine laufende ExcelInstanz zu finden
    Set ExcelApp = GetObject(, "Excel.application")
    If Err.Number > 0 Then
        ' Excel neu Starten
        Set ExcelApp = CreateObject("Excel.application")
        ExcelApp.Visible = True
    End If
    On Error GoTo 0
 
    For Each ExcelWorkbook In ExcelApp.Workbooks
        If UCase(ExcelWorkbook.FullName) = Datei Then
            DateiOffen = True
            Exit For
        End If
    Next ExcelWorkbook

    If DateiOffen = False Then
        ' Wenn noch nicht geladen dann Datei öffnen
        ' Datei muss vorhanden sein !
        ' Ansonsten brauchst du eine Fehlerbehandlung
        ExcelApp.Application.Workbooks.Open Datei
        Set ExcelWorkbook = ExcelApp.Application.ActiveWorkbook
    End If
 
    '1. Worksheet aktivieren
    Set ExcelSheet = ExcelWorkbook.Sheets(1)
 
    ' Letzten Eintrag in Spalte A finden
    Zeile = ExcelSheet.Cells(ExcelSheet.Rows.Count, 1).End(xlup).Row
 
    ExcelSheet.Cells(Zeile, 1) = "Bummelletzte"
 
End Sub


Grüße, Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InesP
Mitglied



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 07. Dez. 2006 14:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo
Stelli und Nancy, Ihr seid große Klasse. Es klappt und ich habe wieder viel gelernt. Was ist eigentlich besser, die frühe oder die späte Bindung, wenn ich auf Excel zugreifen will.
Achso, die Unities sind an Euch unterwegs!
Gruß Ines

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

startrek
Moderator
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 07. Dez. 2006 15:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

Ist irgendwie eine Glaubensfrage, allerdings kann ich da so schwer Stellung beziehen, was besser ist. Ich denke das hängt davon ab, was du programmierst, für wen und wo der Code überall laufen soll.

Vorteil early Binding ist ganz klar, dass sämtliche Objekte und Konstanten des Proggis durch den Verweis bekannt sind.
Also um so Konstanten wie xlup, xlcelltypelastcell ... oder zB für Acad Konstanten wie acred, acDimAligned, acFontBold ... musst Du dir keinen Kopf machen, ebensowenig wie um Methoden, etc. da dies alles die Umgebung 'weiß';-)

Ein Nachteil (wenn überhaupt so zu nennen) wäre, wenn jemand ein Programm gar nicht hat, geht das in die Hosen, ebenso wie es ggf. Versionskonflikte geben könnte.

In Acad2000 hab ich verloren, wenn ich versuche Code mit einem Verweis auf die M$ Regular Expression zum Laufen zu bringen, nehme ich aber statt:

Code:

dim r as New RegExp
'sowas
dim r as object
set r = createobject("vbscript.regexp")


ist die Welt in Ordnung.

Aber das nur mal als ein exotisches Beispiel, wo ich persönlich Negativerfahrung gemacht hab und mit so alten Schinken arbeitet eh kaum einer mehr.

Ich denke mal es spricht nix dagegen, innerhalb der Umgebung Acad/Office Verweise zu verwenden, die machen einem das Leben schon angenehmer.

Grüsse, Nancy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

InesP
Mitglied



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 07. Dez. 2006 18:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Nancy,
dank Dir für Deine Hinweise. Es ist immer wieder das Hintergrundwissen was fehlt und wenn das Proggi nicht läuft steht man da wie doof.
Viele Grüße und einen schönen Abend noch!
Gruß Ines

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz