MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Office - Allgemein
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 12.06.2018, 06:25   #1
DeBabba
MOF Koryphäe
MOF Koryphäe
Standard Frage - MS-Project VBA

Moin Forum,
eigentlich bin ich meist im Excel Bereich unterwegs, aber heute....
Ich bräuchte Unterstützung zu MS-Project
Hier meine Fragen
1.) Wie lese ich einen Wert aus einem Feld in eine Variable?
2.) Wie bekomme ich alle Einträge einer Spalte in ein Pulldown einer Form

Im Excel ist das alles kein Problem. Vielleicht kennt jemand hier ne Lösung, oder hat nen Link wo ich da nachschauen kann oder oder oder

Vielen Dank für eure Hilfe schon mal vorab

Gruß
DeBabba
DeBabba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.06.2018, 09:58   #2
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo DeBabba,

mit einem "Feld" meinst du wohl eine Tabellenzelle?

dann geht das so (Beispiel für die Tabelle, in der die Schreibmarke steht, Zelle(zeile1, Spalte2):
Code:

Sub eineZelleAuslesen()
Dim meineTabelle As Table
Dim meinWert As String

Set meineTabelle = Selection.Tables(1)
    With meineTabelle
        meinWert = Left(.Cell(1, 2).Range.Text, Len(.Cell(1, 2).Range.Text) - 2)
    End With
MsgBox meinWert
End Sub
Das Gehubere mit Left und Len dient dazu, die Zellen-Ende-Marken zu eliminieren, die sonst mitkommen würden.

Um eine Spalte in ein Array zu bringen, musst du sie durchschleifen (bei einer Zeile ginge es vermutlich einfacher):
Code:

Sub SpalteInArray()
Dim i As Long
Dim meineSpalte As Column
Dim meinSpaltenText() As String

'Spalte einlesen
    If Selection.Information(wdWithInTable) = False Then
        MsgBox "Schreibmarke in die Tabelle setzen!"
        Exit Sub
    End If

Set meineSpalte = Selection.Tables(1).Columns(1)

    For i = 1 To meineSpalte.Cells.Count
        ReDim Preserve meinSpaltenText(i)
        meinSpaltenText(i) = Left(meineSpalte.Cells(i).Range.Text, Len(meineSpalte.Cells(i).Range.Text) - 2)
    Next i

'Wie du dieses Array in ein Dropdown bringst, hängt von der verwendeten Sorte ab(Active-X, Inhaltssteuerelement..)
'deshalb hier nur die Ausgabe in einer Messagebox:

For i = 1 To UBound(meinSpaltenText)
    MsgBox meinSpaltenText(i)
Next i
End Sub

__________________

Gruß
Gerhard

Geändert von Gerhard H (15.06.2018 um 10:02 Uhr).
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.06.2018, 11:00   #3
DeBabba
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Hi Gerhard,
super vielen Dank
werde ich testen, sobald ich wieder zu Hause bin und Zeit habe
Das Array in ein Drop down werde ich mit "Item.Add" realisieren
Ich melde mich dann wieder

Gruß und nochmals VIELEN DANK
KLaus

Geändert von DeBabba (15.06.2018 um 11:02 Uhr).
DeBabba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.06.2018, 07:05   #4
DeBabba
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Hi Gerhard,
nochmal Danke für Deine Tipps
Aber sorry, funzt nicht
+++Set meineTabelle = Selection.Tables(1)
kommt, das die Variable nicht definiert sei

Und eine weitere Sache kommt auf
Ich suche einen Wert in Project mit
FindEx Field:="Text5", Test:="Enthält", Value:=ActNum, Next:=True, MatchCase:=False, SearchAllFields:=False
Wobei ActNum eine variable ist
Frage: Wie bekomme ich es hin, dass wenn der Wert nicht existent ist, also nicht gefunden werden kann, ich einen Fehler erhalte den ich umgehen kann
In Excel
If Bereich.find("Hallo") is nothing
hast Du da ne Idee??

Gruß
DeBabba Klaus
DeBabba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.06.2018, 11:57   #5
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Klaus


Zu 1:
"Set meineTabelle = Selection.Tables(1)
kommt, das die Variable nicht definiert sei"


Es ist immer ratsam, genau das zu tun: Dim meineTabelle as Table

Eine andere Fehlermöglichkeit wäre, dass sich die Schreibmarke nicht in der Tabelle befindet. Dann würde die Fehlermeldung aber lauten:
Laufzeitfehler 5941: Das angeforderte Element ist nicht in der Sammlung vorhanden.
Diesen Fehler könntest du durch eine vorgeschaltete Prüfung vermeiden, analog wie im zweiten Makro (If Selection.Information...)

Zu 2:
"Ich suche einen Wert in Project mit FindEx..."

FindEx sagt mir nichts. Was soll das sein? Arbeitest du mit Regulären Ausdrücken? Oder hast du da eine Excelsuche freihändig auf Word übertragen wollen?

Wenn ich das richtig deute, und du ein altes Formularfeld auf den aktuellen Wert der Variable AktNum untersuchen willst so ging das z.B. so:
Code:

Sub durchsuchFormularfeld()
Dim aktnum As Long

aktnum = 32

'genaues Resultat:
'If ActiveDocument.FormFields("Text5").Result = "32" Then
    
'gesuchte Zahl ist nur enthalten, z.B. "ich bin 32" oder "1324"
If InStr(ActiveDocument.FormFields("text5").Result, "32") > 0 Then
    
    MsgBox "Treffer"
Else
    MsgBox "kein Treffer"
End If
End Sub
Falls meine Raterei nicht zutreffend war, bitte ein bisschen mehr Code, am besten mit Musterdokument

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.06.2018, 12:27   #6
DeBabba
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Hi Gerhard,
sorry, hab mich falsch ausgedrückt
Variable nicht vorhanden kommt beim Befehl "Selection" ROT markiert
Ich hänge mal den Code dran und markiere die Stellen wo es klemmt
Noch kurz zur Erklärung
ich vergleiche Einträge einer Excel Liste mit den Einträgen in Projekt.
Dazu öffne ich ne Excel Datei --- OK
Laufe die Excel Datei als schleife durch --- OK
Finde mit FindEx die stelle mit in Excel gefundenen Nummer --- OK
Weise daraufhin den Inhalt von Excelfeldern in die Zellen in Project zu --- OK
Im zweiten Schritt suche ich in einer 2. Schleife weitere Inhalte um diese wiederum zuzuordnen --- Geht nicht richtig, weil ich von Project keine Rückmeldung erhalt, wenn der gesuchte Wert nicht vorhanden ist. Der Focus bleibt immer auf dem zuletzt gefundenen Eintrag.

Code:

Sub EXcel_Abgleich()
Dim Qdat, EXAPP As Object, EXFi As Object, EXShe As Object
Dim ExFilter, FiNa, Erg1, Ber1, Ber2, PSPEff
Dim ActNum, Z2, Erg2
Dim Lop1, Lop2, AnzExRow, SAPs, SAPe, Effo, Z1, PSP, Dopp
Dim MeineTabelle As Table

ExFilter = "Excel-Dateien(*.xl*), *.xl*"
Set MeineTabelle = Selection.Table(1)
Set EXAPP = CreateObject("Excel.application")
FiNa = EXAPP.getopenfilename(ExFilter)
If FiNa = False Then Exit Sub
Set EXFi = EXAPP.workbooks.Open(FiNa)
Set EXShe = EXFi.worksheets(1)
EXAPP.Visible = True

With EXShe
    AnzExRow = .usedrange.rows.Count
    Set Ber1 = .Range(.cells(3, 1), .cells(AnzExRow, 1))
    Set Ber2 = .Range(.cells(3, 14), .cells(AnzExRow, 14))
    For Lop1 = 3 To AnzExRow
        PSP = .cells(Lop1, 1)
        Erg1 = EXAPP.worksheetfunction.sumif(Ber1, PSP, Ber2)
        If Not PSP = Dopp Then
            SAPs = .cells(Lop1, 11)
            SAPe = .cells(Lop1, 12)
            Effo = .cells(Lop1, 14)
            FindEx Field:="Text5", Test:="Enthält", Value:=PSP, Next:=True, MatchCase:=False, SearchAllFields:=False
            SetTaskField Field:="text11", Value:=SAPs
            SetTaskField Field:="text12", Value:=SAPe
            SetTaskField Field:="zahl10", Value:=Erg1
            Dopp = PSP
            Z1 = Z1 + 1
        End If
    Next
    Dopp = ""
    Set Ber1 = .Range(.cells(3, 7), .cells(AnzExRow, 7))
    Set Ber2 = .Range(.cells(3, 14), .cells(AnzExRow, 14))
    For Lop2 = 3 To AnzExRow
        ActNum = .cells(Lop2, 7)
        Erg2 = EXAPP.worksheetfunction.sumif(Ber1, ActNum, Ber2)
        If Not ActNum = Dopp Then
            SAPs = .cells(Lop2, 11)
            SAPe = .cells(Lop2, 12)
            Effo = .cells(Lop2, 14)
            FindEx Field:="Text5", Test:="Enthält", Value:=ActNum, Next:=True, MatchCase:=False, SearchAllFields:=False
            SetTaskField Field:="text11", Value:=SAPs
            SetTaskField Field:="text12", Value:=SAPe
            SetTaskField Field:="zahl10", Value:=Erg2
            Dopp = ActNum
            Z2 = Z2 + 1
        End If
    Next
End With
EXFi.Close Savechanges:=False
EXAPP.Quit
Set Ber1 = Nothing
Set Ber2 = Nothing
Set EXAPP = Nothing
Set EXShe = Nothing
Set EXFi = Nothing
MsgBox (Z1 & "  PSP-Datensätze in Excel File gefunden und übertragen!" & Chr(10) & _
        Z2 & "  Tasknummern aus Excel File zugeordnet")
End Sub
Das ist jetzt mehr zum 2.Problemchen

Hoffe Du steigst da durch, ist im Moment noch recht chaotisch....sorry

Gruß
Klaus
DeBabba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.06.2018, 13:54   #7
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Klaus,

auf die Schnelle zum ersten Problem: Es muss heißen: Selection.Tables(1)
Angesichts der Tatsache, dass du da von Word aus in Excel hantierst, erscheint es mir aber sicherer, wenn du die Word-Tabelle mit dem Index ansprichst, d.h. z.B. mit Activedocument.Tables(2), wenn die zweite Tabelle im aktuell geöffneten Word-Dokument gemeint ist.

Zum Rest kann ich nichts sagen, da mir immer noch unklar ist, was FindEx sein soll. Wenn ich deinen Code in ein Modul von Word reinkopiere (du steuerst das doch von Word aus, oder?), krieg ich einen Laufzeitfehler "Sub oder Function nicht definiert". Da du keine gleichlautende Variable definiert hast, lautet meine derzeit aktuelle Vermutung also, dass es irgendwo so eine Function FindEx geben muss, an die die Parameter übergeben werden, aber du hast sie nicht hergezeigt. Ich weiß nicht, was das liefern soll.

Ähnliche Verwirrnis herrscht bei mir über das Wesen von SetTaskField.

Abgesehn davon find ich das Problem ohne Excel-Mustermappe, auf die man deine Code(s?) anwenden kann, sehr schwer nachzuvollziehen.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.06.2018, 14:00   #8
DeBabba
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Hi Gerhard
Ich glaub wir reden hier aneinander vorbei, denn

Zitat:

Angesichts der Tatsache, dass du da von Word aus in Excel hantierst

NICHT WORD sondern MS-PROJECT
denn Word wäre da nicht das Problem

Gruß
Klaus
DeBabba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.06.2018, 16:09   #9
Gerhard H
MOF Guru
MOF Guru
Standard

Herrje....
und ich hab mich dauernd gewundert, wieso du dein Word "Project" nennst.

Sorry, da bin ich raus. MS-Project hab ich noch nicht mal aus der Ferne gesehen.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.06.2018, 16:11   #10
DeBabba
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Null Problemo
Trotzdem Danke für Deine Mühe

Gruß
Klaus
DeBabba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.