| ||
|
Ergebnisse auf Deutsch für vba excel-formel in sheet
|
| Szukaj:Słowo(a): vba excel-formel in sheet |
VB.NET, Excel Programmierung: Bedingte Formatierung - Problem Hallo zusammen, ich habe folgendes Problem. Ich möchte über mein Programm eine bedingte Formatierung in ein Excel Sheet eintragen. Die bedingte Formatierung liegt darin, dass ich prüfen möchte, ob Text1 oder Text2 in dem Feld stehen. Falls ja, soll der Hintergrund der Zelle seine Farbe ändern. b1 und b2 sind die Texte, die ich über Variablen in die Bedingung einfügen möchte. Daher habe ich folgendes probiert: xlsArbeitsblatt.Range("I15").FormatConditions.Add( Excel.XlFormatConditionType.xlExpression,Formula1: ="ODER(I15="Chr(34) & b1 & Chr(34) ";I15=" Chr(34) & b2 & Chr(34) ")") xlsArbeitsblatt.Range("I15").FormatConditions(2).I nterior.ColorIndex = 44 Leider ergibt das in der Excel Zelle im Worksheet: ="ODER(I15="hoch";I15="mittelhoch")" was leider falsch ist. Eigentlich müsste es ja =ODER(I15="hoch";I15="mittelhoch") heiüen Also die " um den kompletten Ausdruck herum (vor dem ODER und nach der ) müssten weg. Das klappt aber leider nicht. Wenn ich die " vor dem ODER wegnehme, erkennt er die Formel in VB nicht mehr und meldet mir einen Fehler, weil er natürlich das ODER nicht kennt. Könnt ihr mir vielleicht helfen bzw. einen kleinen Tipp dazu geben? Vielen Dank für eure Hilfe! :) |
Mit VBA erstellte Formel wird nicht korrekt in Excel dargestellt Hallo, ich habe mit VBA folgende Formel in eine Zelle eingetragen: ActiveSheet.Cells(i, 4).FormulaR1C1 = "=IF(AND(RC[-2]>0,RC[-1]=0),-1,IF(UND(RC[-2]>0,RC[-1]>0),((100/RC[-2] * RC[-1]) - 100)/100,IF(AND(RC[-2]>0,RC[-1]<0),((100/RC[-2] * RC[-1]) - 100)/100,0)))" In der Zelle der Excel-Datei steht "#NAME". Markiere ich das Feld dann sehen ich die korrekte Formel in der Bearbeitungsleiste. Erst nachdem ich den Cursor in die Bearbeitungsleiste setze und die gleiche Formel mit Return bestätige wird der Wert in der Zelle korrekt berechnet. Hat jemand eine Idee? |
Bassreflex Korrekturfaktoren - Unsinn? Hallo, da ich bisher sämtliche BR Boxen nach den Korrekturfaktoren hier aus dem Forum abgestimmt habe (http://www.visaton.de/vb/showthread....hlight=eckiges), genauergesagt mit dem Excel Sheet von we-ha´s website bringt mich dieses Post hier schon zum grübeln: Die im Visaton-Forum verbreiteten "Korrekturfaktoren" vom TomTom sind grober Unfug und dürfen nicht verallgemeinert benutzt werden!!! Der Junge hat diese angeblichen Korrekturfaktoren empirisch an Visaton-Lautsprechern wie der Vox ermittelt und fälschlich verallgemeinert. Bei einer Vox sitzt der Reflexkanal am Ende einer kurzen Transmission-Line, so daü der Reflexkanal in jenem Fall (und nur in jenem!) durch Nutzung des Viertelwelleneffekts viel kürzer als theoretisch berechnet ausfällt (Martin King hat für solche Gehäuse den Begriff ML-TL (mass loaded transmission line) geprägt. In einem Kompaktlautsprecher wie der PaMo kann dieser Effekt selbstverständlich nicht ähnlich wirksam werden, so daü die Reflexkanallänge sich ausreichend genau nach den üblichen Formeln berechnet. Bitte lasst diesen Visaton-Blödsinn endlich mal in der Versenkung verschwinden, wo er hingehört!!! (stammt übrigends hiervon: http://www.hifi-forum.de/index.php?a...hread=3940&z=2 ) Rettet mein Weltbild! Grüüe Hari |
Wie sieht der Aufbau der Excel datei aus? Mit Formatierungen und verbunden Zellen? Formeln? Bezüg? Absolute Zellen/Spalten Fixierungen? Das würde mich auch interessieren wie man das mittels PHP in eine DB schreibt. Eine Normales Excelsheet mit nur zahlen, ohne Formatierungen und normalen spalten, kann man leicht in das Richtige Format bringen und einlesen lassen. Lasse regelmäüig eine Excel Datei mit ca. 3000 Newsletter Kundendaten mit einer DB über PHP abgleichen um doppelte Einträge rauszufiltern und fehlende Eintragen... Aber Formatierungen, oder verbundene Zellen würde mich auch brennend interessieren :D. Bisher hab ich da ein VB.NET Prog vorgeschaltet, dass zuerst die Excel Mappe auseinander bastelt und direkt ne Verbindung zur DB aufbaut, quasi ohne PHP. Aber direkt Online alles aufm Server verarbeiten, wäre mit Sicherheit viel Eleganter... also, her mit deiner Lösung :).... *gespanntsei* MfG :) |
Hier mal ein kleiner VBA Beispielcode: Sheets("Tabelle1").Select 'dies wählt Tabelle 1 aus Range("A1").Select 'Hier wählst Du die entsprechende Zelle A1 an meineVariable = ActiveCell.Formula 'Damit kopierst Du den Inhalt (Wert oder Text in eine lokale Variable) Range("B1").Select 'Nun wechsel ich die Zelle auf B1 ActiveCell.Formula = meineVariable/2 /der Wert aus A1 wird halbiert und in die Zelle hineingeschrieben PS: Du könntest auch ActiveCell.Value verwenden ... lustigerweise müssen Variablen in VBA unter Excel nicht definiert werden. Somit kannst Du recht unproblematisch mit Zellenwerten arbeiten. ... Ich habe mir das alles selbst beigebracht, indem ich einfach mal auf Extras ->Makros -> Aufzeichnen geklickt habe und dann einfach ein wenig hin und her gewechselt habe - dann macht man Stop und schaut sich das Makro an (Alt+F8) und dann auf bearbeiten :-) Grüüe DanGermany |
Dialogbox: "Namenskonflikt" in Excel VBA Hallo, vielleicht kennt sich der Eine oder Andere etwas mit der VBA Programmierung von Excel aus. Ich habe hier ein Problem für welches es scheinbar keine Lösung gibt. Ich habe mir ein Skript geschrieben, welches eine zweite Exceldatei öffnet bestimmte Zeilen markiert und in mein Original Excelsheet einfügt. Funktioniert auch einwandfrei, jedoch verwende ich in meinen Formeln Referenznamen. Also Verweise auf bestimmte Zellenbereiche, man könnte es auch Label nennen. Nun merkt Excel, dass der einzufügende Bereich eine Referenz enthält die es im Original schon gibt. Es erscheint eine Dialogbox und frägt den User: Willst Du wirklich einfügen oder die Referenz umbenennen. Da ich diesen Prozess automatisch ablaufen will, benötige ich eine Option die es leider nicht gibt, die mir auf diese Frage immer mit Ja antwortet. Befehle wir "on error resume" oder "on error goto" helfen hier auch nicht weiter, ebenso das ablaufen lassen ohne Bildschirmaufbau usw. Wer kennt das Problem und wie kann man es umgehen? Gruü Jochen Hier noch den Code: ... Range(cpcurdefinerow + 1 & ":" & cplaufendx - 1).Select Selection.Copy Workbooks(RememberActiveWorkbook).Activate Range(curdefinerow + 1 & ":" & curdefinerow + 1).Select Selection.Insert Shift:=xlDown <-- bei dieser Aktion kommt die Dialogbox ... |
Hallo Frank, frank_s schrieb: > Hallo Melanie, vielen Dank für deine Antwort. > > Wir haben hier Daten die nicht eindeutig zu identifizieren sind. Um > Datensätze eindeutig zuzuordnenen, wurde das Hochkommata als > Kennzeichen eingeführt, mit dem ich nun meine Probleme habe. > Ursprünglich kommen die Daten aus einem Workdokument und werden per > Copy / Paste ins Excelsheet übernommen. Vielleicht gibt es irgendwie > ein Workaround, Excel zeigt ja im bestimmten Fall das Hochkommata an > (Editmodus). > > Das Hochkommata kann leider auch nicht abgeändert werden, da ansonsten > mehr als 10.000 Datensätze überarbeitet werden müssten. im Moment habe ich eine erste Lösung mit einem Excel4-Makro. Definiere folgenden Namen und Formel im Menü 'Einfügen/Namen/Definieren': IstHochkomma =ZELLE.ZUORDNEN(52;INDIREKT("ZS(-1)";FALSCH))="'" Schreibe in die rechte Nebenzelle der zu durchsuchenden Zelle die Formel: =IstHochkomma Als Ergebnis erhälst du WAHR oder FALSCH. Auf Basis dieses Namens lassen sich bestimmt noch weitere Lösungen ausarbeiten. Mit freundlichen Grüssen Melanie Breden -- - Microsoft MVP für Excel - Microsoft Excel - Die ExpertenTipps (Kein Link ?) Das Excel-VBA Codebook (Kein Link ?) Excel-Auftragsprogrammierung |
Sorry!<br> Ich hatte vor Jahren eine Demo gemacht, die lauffähig war, aber an die komme ich nicht mehr ran. <br>Die Umsetzung in Excel war dann übrigens kinderleicht. <PRE> var Excel, WS, wa : OLEVariant; range : variant; i : integer; myconnection : TMyConnection; myquery : TMyQuery; begin // Connection zum Server myconnection := TMyConnection.Create(nil); myconnection.Username := 'irgendwer'; myconnection.Database := 'irgendwas'; myconnection.Server := 'der Host'; myconnection.LoginPrompt := false; myconnection.Connected := true; // Query anlegen myquery := TMyQuery.Create(nil); myquery.Connection := myconnection; myquery.SQL.Clear; // Excel anwerfen try excel := GetActiveOleObject('Excel.Application') except excel := CreateOleObject('Excel.Application') end; excel.visible := false; excel.Caption := 'BVW - Excelgraphik'; // In Charttyp stehen Infos zum Chart: Dateiname, SQL-Query und sowas // Wenn die Notwendige Datei nicht existiert, dann Tschüss! if FileExists(charttyp.Filename) then excel.Application.Workbooks.Open(charttyp.Filename ) else exit; // Abfrage ausführen myquery.SQL.Text := charttyp.SQLText; myquery.Open; // Und in Excel eintragen ws := Excel.ActiveSheet; wa := Excel.Sheets; try Excel.DisplayAlerts := False; Excel.Visible := true; except end; i := 1; Excel.Sheets['Tabelle1'].select; while not myquery.Eof do begin // Warum es "A1" heiüen muü weiü ich nicht, in VB geht's auch anders // ZahlzuChar setzt einfach die 1 in ein "A" um Excel.range['' + ZahlZuChar(i) + '1'].select; Excel.ActiveCell.Formula := MyQuery.FieldByName('Jahr').AsString; Excel.range['' + ZahlZuChar(i) + '2'].select; Excel.cells[2,i].value := MyQuery.FieldByName('Anzahl').AsString; MyQuery.next; inc(i); end; Excel.Sheets['Diagramm1'].Select; try range := wa.Item['Tabelle1'].Range['A1:' + ZahlZuChar(i-1) + '1']; wa.Item['Diagramm1'].SeriesCollection.Item[1].xValues := range; except end; try range := wa.Item['Tabelle1'].Range['A2:' + ZahlZuChar(i-1) + '2']; wa.Item['Diagramm1'].SeriesCollection.Item[1].Values := range; except end; // Chartinformationen freigeben charttyp.Free; // Excel sichtbar machen Excel.Visible := true; Excel.Sheets['Diagramm1'].Activate; end; </PRE> |
Zitat:
Das "Programm" habe ich erzeugt. Ich benutze dazu ein Perl-Skript, welches aus einfachen Formeln eine solche Datei ausspuckt. Ergebnis ist eine HTML-Datei+Javascript, was recht komfortabel in Bezug auf Betriebssystemunabhängigkeit ist. Auch muss man keine Software herunterladen/installieren/kaufen. Mittlerweile gab es mal wieder ein Update. Aktuelle Versionen unter http://users.informatik.uni-halle.de/~hoffmaro/akustik/ Es gibt eine einfache Variante, in der man nur gewünschte Tuningfrequenz, Nettovolumen der Box und die Fläche der Reflexöffnung eingeben muss und auch eine erweiterte, die anhand der Chassisdaten die minimale nötige Fläche bestimmt und dafür dann die Länge errechnet. Ich habe TomToms Rechenwege nachvollzogen (siehe Thread http://www.visaton.de/vb/showthread....&threadid=3128) und den Korrekturfaktor einflieüen lassen. Seine Berechnung von Wa scheint nicht korrekt zu sein, ich habe im Netz dafür eine andere Angabe gefunden (s.o. Thread). Ansonsten alles streng nach Vorlage. @We-Ha: Dein Excel-Sheet scheint nach obigem TomTom falsch zu rechnen: Beim Abzug der Korrektur rechnest Du -Wurzel(A)*k, obwohl es ja -D*k, bzw. -2*r*k heiüen müsste. Zur Berechnung der minimalen Rohrlänge, damit keine Strömungsgeräusche auftreten habe ich keine Herleitungen finden können. Evtl. ist der Wert etwas zu hoch gegriffen (Faktor 2?), oder man sollte nicht mit der vollen elektr. Belastbarkeit rechnen, da sich diese Situation im Alltagsgebrauch ja sehr selten, wenn überhaupt, einstellt. Für Korrekturen und Verbesserungsvorschläge bin ich immer offen. Was macht eigentlich die Berechnungformel für das virtuelle Volumen? :) Gruü, Robby |
Grüezi Wolfgang Wolfgang Reinhardt schrieb am 17.10.2005 > Ich greife auf Excel sheets per GetRows() mit ADO 2.6 zu. Habe dabei > folgendes Problem: > Bekomme in Spalten die Text und Zahlenwerte enthalten, nur die > Zahlenwerte zurück. Die Textinhalte werden als Null zurück gegebenn. > Spalten, die nur Text enthalten, geben die Inhalte korrekt zurück. Wie Alexander schon erwähnte liegt das an ADO, welches 'nur' reine Daten zurückliefert; den Datentyp pro Spalte also anhand der ersten Einträge ermittelt und dann für die gesamte Spalte verwendet. Als Alternative könntest Du die folgende Prozedur verwenden, der es 'egal' ist, welche Werte in den Zellen stehen. Sie nimmt den 'Umweg' über temporäre Formeln im Zielbereich und überschreibt diese anschliessend mit den Werten: Public Function GetDataClosedWB(SourcePath As String, _ SourceFile As String, _ sourceSheet As String, _ SourceRange As String, _ TargetRange As Range) As Boolean 'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe 'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus 'Š t.ramel@mvps.org Dim strQuelle As String Dim Zeilen As Long Dim Spalten As Byte On Error GoTo InvalidInput strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & _ sourceSheet & "'!" & _ Range(SourceRange).Cells(1, 1).Address(0, 0) Zeilen = Range(SourceRange).Rows.Count Spalten = Range(SourceRange).Columns.Count With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten) .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")" .Value = .Value End With GetDataClosedWB = True Exit Function InvalidInput: MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _ vbExclamation, "Get data from closed Workbook" GetDataClosedWB = False End Function Public Sub HoleDaten3() Dim Pfad As String Dim Dateiname As String Dim Blatt As String Pfad = "D:DeinPfad" Dateiname = "DeineDatei.xls" Blatt = "DeinTabellenblatt" If GetDataClosedWB(Pfad, _ Dateiname, _ Blatt, _ "A5:DZ57", _ Worksheets("Tabelle3").Range("B10")) Then MsgBox "Daten importiert" End If End Sub Mit freundlichen Grüssen Thomas Ramel -- - MVP für Microsoft-Excel - [Win XP Pro SP-2 / xl2000 SP-3] Microsoft Excel - Die ExpertenTipps: ((Kein Link ?) und (Kein Link ?)) |