Hallo, ich schon wieder.
Also entweder bin ich blind oder...
Ich möchte alle Zellen der ersten Spalte nach einem bestimmten Wert durchsuchen.
Hier mein Lösungsansatz:
Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook();
foreach(Worksheet sheet in wb)
{
if (sheet.Name = "Setup")
{
//Alle Zeilen erste Spalte durchsuchen
foreach(Row row in sheet.Rows)
...
nur Row gibts nicht. Kann das sein?
Ich muss irgendwie die einzelnen Zellen finden...
Danke.
Letztendlich arbeitest du sowieso nur mit Ranges in Excel.
Probier mal:
foreach(Range row in sheet.Rows)
Musst aber wahrscheinlich mit Laufvariablen arbeiten.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
Hmm...
wäre ja auch zu schön gewesen:
foreach (Range row in sheet.Rows)
{
i++;
if (row[i, 1].ToString() != "")
System.Windows.Forms.MessageBox.Show(row[i, 1].ToString());
}
...gibt bei row[i, 1].ToString() einen Fehler:
Ausnahme von HRESULT: 0x800A03EC
Also nochmal...
folgender Code funktioniert zum Teil:
public static string getMacroFolder()
{
int i = 0;
string folder = "";
if (DDT.ESG2007.Properties.Settings.Default.LoadSettingsFromTable)
{
Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook;
Worksheet activeSheet = (Worksheet)wb.ActiveSheet;
Worksheet setupSheet = null;
//Worksheet ws = null;
//Aktuelles Workbook holen
foreach (Worksheet sheet in wb.Sheets)
{
if (sheet.Name == "Setup")
{
sheet.Activate();
//Alle Zeilen erste Spalte durchsuchen
foreach (Range row in sheet.Rows)
{
i++;
if (sheet.Cells[ i, 1].ToString() != "")
System.Windows.Forms.MessageBox.Show(sheet.Cells[i, 1].ToString());
}
}
}
//Einstellungen aus Tabelle laden
folder = "";
}
Jetzt hab ich zwar keine Fehlermeldung aber dafür gibt mir sheet.Cells[i,1].ToString() nur System._ComObject zurück und nicht den Wert der Zelle...
Hat vielleicht jemand nen Link zu diesem Thema?
Ich glaub ich hab da noch Bedarf.
Aus der MSDN werd ich nicht schlau.
Du musst
sheet.Cells[row, col].Value
nutzen.
Also das Value Property einer Range oder Cell!
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
Jo, gibts nur nicht 🤔
Hab aber nen Weg gefunden:
foreach (Range row in sheet.Rows)
{
i++;
if (sheet.get_Range(sheet.Cells[ i, 1],sheet.Cells[i,1]).Value2.ToString() != "")
System.Windows.Forms.MessageBox.Show(sheet.get_Range(sheet.Cells[i, 1], sheet.Cells[i, 1]).Value2.ToString());
}
Bescheuert aber wenns anders nicht geht...
Müsstest es casten:
((Range)sheet.Cells[row, col]).Value
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
pff...
hatte ich schon versucht, hab aber ein Paar Klammern vergessen 8o
Danke.