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&gt
Zitat:
Original geschrieben von Jumbo
http://users.informatik.uni-halle.de...ended.calc.htm

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 ?))

>