Autor Beitrag
Xearox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Mo 06.06.11 17:23 
Folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if NeuerKontakt then
    begin
      ContactAdd;
      Excel.Sheets['Kontakte'].Cells[450,1]:=Vorname;
      Excel.Sheets['Kontakte'].Cells[450,2]:=Nachname;
      Excel.Sheets['Kontakte'].Cells[450,3]:=Street;
      Excel.Sheets['Kontakte'].Cells[450,4]:=PLZ;
      Excel.Sheets['Kontakte'].Cells[450,5]:=Fax;
      Kundenauswahl:=Vorname;
    end;

mit diesem Code füge ich im Tabellen Blatt Kontakte, einen neuen Kontakt hinzu.
Nach geht es direkt weiter, ohne zwischen schritt mit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Excel.Sheets['Rechnungs-Erfassung'].Cells[10,3] := Kundenauswahl;
      Excel.Sheets['Rechnungs-Erfassung'].Cells[35,4] := Zahlungsart;
      if CB_Lieferdatum.Checked then Excel.Sheets['Rechnungs-Erfassung'].Cells[33,1]:=E_Lieferdatum.Text;
      for I := 0 to 13 - 1 do
        begin
          Excel.Sheets['Rechnungs-Erfassung'].Cells[AnzahlZeile,19]:=ArtikelAuswahl[i].Anzahl;//Stückzahl
          Excel.Sheets['Rechnungs-Erfassung'].Cells[ArtikelZeile,1]:=ArtikelAuswahl[i].Name;   //Artikelname
          ArtikelZeile:=ArtikelZeile+1;
          AnzahlZeile:=AnzahlZeile+1;
        end;
      Excel.run('rechnungen_neu.xls!uebertragen');
      Excel.Visible:=True;
      //Excel.ActiveWorkBook.Saved := TRUE;
      //Excel.Quit; // Beendet Excel
      Excel := Unassigned;


jedoch gibt er mir nach dem Erstencode direkt einen Fehler von VB aus.
Laufzeitfehler 1004 - Ungültiger Sortierbezug
Dies macht er aber nur, wenn ich es aus Delphi heraus mache.
In Excel selber kann ich auch zur Zeile 5000 gehen statt 450 und sortiert ohne Fehler.
Habe nach dem Fehler schon gegoogelt, aber immer wird ein Fehler im VB, aber dies ist nicht der Fall, weil es so funktioniert, aber nicht über Delphi.

Kann mir da jemand weiterhelfen?
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mo 06.06.11 19:58 
Hallo Xearox,

was steht in ArtikelZeile und AnzahlZeile beim 1 Durchlauf der for-Schleife?

Bis bald Chemiker
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Mo 06.06.11 20:14 
Das liegt an dem, was du geschrieben hast, nicht...Sobald er von Zeile 8 in 9 springt, kommt der fehler

alles andere funktioniert...also vom oberen code, wo das mit vorname etc drin steht
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mo 06.06.11 21:03 
Hallo,

wenn Du die Zeile 9 auskommentierst kommt dann trotzdem der Fehler?

Bis bald Chemiker
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Mo 06.06.11 21:18 
jop...

und wenn ich Zeile 8 auskommentiere, dann kommt er nicht mehr, jedoch braucht man die zeile 8, weil sonst die Sortier Routine nicht greift...
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mo 06.06.11 21:39 
Hallo,

ist Fax ein String oder eine Zahl?

Bis bald Chemiker
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Mo 06.06.11 22:29 
alles ist string was da steht
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mo 06.06.11 23:10 
Hallo Xearox,

wie interpretiert Excel den Inhalt von Fax als Zahl oder als String?

Bis bald Chemiker
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Di 07.06.11 00:00 
Schaus dir bitte selber an:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, ComCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    LB_Kunde: TListBox;
    Label1: TLabel;
    LB_Artikel: TListBox;
    Label2: TLabel;
    Button2: TButton;
    E_Kunde: TEdit;
    L_Kunde: TLabel;
    LB_Aus_Artikel: TListBox;
    Label3: TLabel;
    B_transfer: TButton;
    CB_Lieferdatum: TCheckBox;
    E_Lieferdatum: TEdit;
    L_DatumLayout: TLabel;
    B_Vorschau: TButton;
    LB_aus_ArtikelAnz: TListBox;
    Label4: TLabel;
    TB_Artikel_Anzahl: TTrackBar;
    L_Test: TLabel;
    B_Confirm: TButton;
    RB_Z2: TRadioButton;
    RB_Z1: TRadioButton;
    RB_Z3: TRadioButton;
    RB_Z4: TRadioButton;
    RB_Z5: TRadioButton;
    RB_Z6: TRadioButton;
    B_NeueRechnung: TButton;
    CB_NewKunde: TCheckBox;
    E_Vorname: TEdit;
    E_Nachname: TEdit;
    E_Street: TEdit;
    E_PLZ: TEdit;
    L_Vorname: TLabel;
    L_Nachname: TLabel;
    L_Street: TLabel;
    L_PLZ: TLabel;
    E_Fax: TEdit;
    L_Fax: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure LB_KundeClick(Sender: TObject);
    procedure LB_ArtikelDblClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure CB_LieferdatumClick(Sender: TObject);
    procedure B_VorschauClick(Sender: TObject);
    procedure LB_Aus_ArtikelDblClick(Sender: TObject);
    procedure TB_Artikel_AnzahlChange(Sender: TObject);
    procedure LB_Aus_ArtikelClick(Sender: TObject);
    procedure B_ConfirmClick(Sender: TObject);
    procedure B_transferClick(Sender: TObject);
    procedure L_TestClick(Sender: TObject);
    procedure B_NeueRechnungClick(Sender: TObject);
    procedure CB_NewKundeClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    var
      Excel:variant;
      Kundenauswahl,Zahlungsart:string;
      ArtikelAnz,ArtikelAnzahl,ArtikelNr:integer;
      ArtikelZeile,AnzahlZeile:integer;
      Vorname,Nachname,Street,PLZ,Stadt,Fax:string;
      NeuerKontakt:boolean;


    procedure ArtikelFuellen;
    procedure Memofüllen;
    procedure ZahlungsTyp;
    procedure ContactAdd;
  end;

type
  TArtikel = record
    Ind : string;
    Anzahl: string;
    Name: string;

end;

var
  Form2: TForm2;

implementation

uses Unit3;


const
  ExcelTablle='rechnungen_neu.xls';
  //ExcelTablle='rechi.xls';

var
  ArtikelAuswahl: array[0..13of TArtikel;

{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
  ArtikelFuellen;
end;
//------------------------------------------------------------------------------
procedure TForm2.Button2Click(Sender: TObject);
begin
  close;
end;
procedure TForm2.B_transferClick(Sender: TObject);
var
  Excel, ArtikelSheet, ContactsSheet: OleVariant;
  i: Integer;
begin
  ArtikelZeile:=18;
  AnzahlZeile:=18;
  ZahlungsTyp;
  try
    try
      Excel := CreateOleObject('Excel.Application');
    except
      Excel := GetActiveOleObject('Excel.Application');
    end;
    Excel.Workbooks.Open(ExtractFilePath(Paramstr(0))+(ExcelTablle));
    ContactsSheet := Excel.Workbooks[ExcelTablle].Worksheets['Rechnungs-Erfassung'];
    //Excel.Cells[zeile, spalte].Value := 'Delphi2Excel';
    if NeuerKontakt then
    begin
      ContactAdd;
      Excel.Sheets['Kontakte'].Cells[450,1]:=Vorname;
      Excel.Sheets['Kontakte'].Cells[450,2]:=Nachname;
      Excel.Sheets['Kontakte'].Cells[450,3]:=Street;
      Excel.Sheets['Kontakte'].Cells[450,4]:=PLZ;
      Excel.Sheets['Kontakte'].Cells[450,5]:=Fax;
      Kundenauswahl:=Vorname;
    end;
      Excel.Sheets['Rechnungs-Erfassung'].Cells[10,3] := Kundenauswahl;
      Excel.Sheets['Rechnungs-Erfassung'].Cells[35,4] := Zahlungsart;
      if CB_Lieferdatum.Checked then Excel.Sheets['Rechnungs-Erfassung'].Cells[33,1]:=E_Lieferdatum.Text;
      for I := 0 to 13 - 1 do
        begin
          Excel.Sheets['Rechnungs-Erfassung'].Cells[AnzahlZeile,19]:=ArtikelAuswahl[i].Anzahl;//Stückzahl
          Excel.Sheets['Rechnungs-Erfassung'].Cells[ArtikelZeile,1]:=ArtikelAuswahl[i].Name;   //Artikelname
          ArtikelZeile:=ArtikelZeile+1;
          AnzahlZeile:=AnzahlZeile+1;
        end;
      Excel.run('rechnungen_neu.xls!uebertragen');
      Excel.Visible:=True;
      //Excel.ActiveWorkBook.Saved := TRUE;
      //Excel.Quit; // Beendet Excel
      Excel := Unassigned;
    except
      exit;
      Showmessage('Fehler, Exceldaten konnten nicht eingelesen werden');
    end;
end;
//------------------------------------------------------------------------------
procedure TForm2.ContactAdd;
begin
  Vorname:=E_Vorname.Text;
  Nachname:=E_Nachname.Text;
  PLZ:=E_PLZ.Text;
  Street:=E_Street.Text;
  if E_Fax.Text='' then Fax:='./.' else FAX:=E_Fax.Text;
end;
//------------------------------------------------------------------------------
procedure TForm2.ZahlungsTyp;
begin
  if RB_Z1.Checked then Zahlungsart:=RB_Z1.Caption;
  if RB_Z2.Checked then Zahlungsart:=RB_Z2.Caption;
  if RB_Z3.Checked then Zahlungsart:=RB_Z3.Caption;
  if RB_Z4.Checked then Zahlungsart:=RB_Z4.Caption;
  if RB_Z5.Checked then Zahlungsart:=RB_Z5.Caption;
  if RB_Z6.Checked then Zahlungsart:=RB_Z6.Caption;
end;
//------------------------------------------------------------------------------
procedure TForm2.B_ConfirmClick(Sender: TObject);
begin
  TB_Artikel_Anzahl.Visible:=false;
  B_Confirm.Visible:=false;
end;

procedure TForm2.B_NeueRechnungClick(Sender: TObject);
begin
  //
end;

//------------------------------------------------------------------------------
procedure TForm2.B_VorschauClick(Sender: TObject);
begin
  form3.show;
  MemoFüllen;
end;
//------------------------------------------------------------------------------
procedure TForm2.CB_LieferdatumClick(Sender: TObject);
begin
  E_Lieferdatum.Visible:=True;
  L_DatumLayout.Visible:=True;
end;
procedure TForm2.CB_NewKundeClick(Sender: TObject);
begin
  E_Vorname.Visible:=true;
  E_Nachname.Visible:=true;
  E_Street.Visible:=true;
  E_PLZ.Visible:=true;
  E_Fax.Visible:=true;
  L_Vorname.Visible:=true;
  L_Nachname.Visible:=true;
  L_Street.Visible:=true;
  L_PLZ.Visible:=true;
  L_Fax.Visible:=true;
  NeuerKontakt:=true;
end;

//------------------------------------------------------------------------------
procedure TForm2.FormShow(Sender: TObject);
begin
  ArtikelFuellen;
  ArtikelAnz:=0;
  ArtikelAnzahl:=1;
end;

//------------------------------------------------------------------------------
procedure TForm2.LB_ArtikelDblClick(Sender: TObject);

begin
  if ArtikelAnz<= 12 then
  begin
    ArtikelNr:=LB_Artikel.ItemIndex;
    //Record wird aufgezeichnet
    ArtikelAuswahl[ArtikelAnz].Ind:=inttostr(ArtikelAnz); //Der Index eines Artikels wird festgelegt
    ArtikelAuswahl[ArtikelAnz].Anzahl:=IntToStr(ArtikelAnzahl);          //Die Anzahl der Artikelstückzahl wird festgelegt
    ArtikelAuswahl[ArtikelAnz].Name:=LB_Artikel.Items.Strings[ArtikelNR];//Der Name des Artikels wird festgelegt
    //Record fertig
    //Artikel werden in Liste geschrieben
    LB_Aus_Artikel.Items.Append(ArtikelAuswahl[ArtikelAnz].Name);
    LB_aus_ArtikelAnz.Items.Append(ArtikelAuswahl[ArtikelAnz].Anzahl);
    ArtikelAnz:=ArtikelAnz+1;
  end;
end;
//------------------------------------------------------------------------------
procedure TForm2.LB_Aus_ArtikelClick(Sender: TObject);
begin
  //Hier kommte die Anzahl je Artikel per Rechtsklick rein
  ArtikelNr:=Lb_Aus_Artikel.ItemIndex;
  L_Test.Caption:=inttostr(ArtikelNr);
  TB_Artikel_Anzahl.Visible:=True;
  B_Confirm.Visible:=True;
end;
//------------------------------------------------------------------------------
procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject);
var
  CurrentIndex: Integer;
begin
  CurrentIndex := LB_Aus_Artikel.ItemIndex;
  if CurrentIndex >= 0 then
  begin
    LB_Aus_ArtikelAnz.Items.Delete(CurrentIndex);
    LB_Aus_Artikel.Items.Delete(CurrentIndex);
  end;
end;
//------------------------------------------------------------------------------
procedure TForm2.LB_KundeClick(Sender: TObject);
var
  KundenNr:integer;

begin
  KundenNr:=LB_Kunde.ItemIndex;
  Kundenauswahl:=LB_Kunde.Items.Strings[KundenNr];
  E_Kunde.Text:=Kundenauswahl;
end;
procedure TForm2.L_TestClick(Sender: TObject);
begin
  L_Test.Caption:=ArtikelAuswahl[12].Ind;
end;

//------------------------------------------------------------------------------
procedure TForm2.ArtikelFuellen;
var
  Excel, ArtikelSheet, ContactsSheet: OleVariant;
  i,iMaxZeilen: Integer;
begin
  try
    try
      Excel := CreateOleObject('Excel.Application');
    except
      Excel := GetActiveOleObject('Excel.Application');
    end;
    Excel.Workbooks.Open(ExtractFilePath(Paramstr(0))+(ExcelTablle));

    ContactsSheet := Excel.Workbooks[ExcelTablle].Worksheets['Kontakte'];
    iMaxZeilen := ContactsSheet.UsedRange.Rows.Count;
    for i := 1 to iMaxZeilen do
      LB_Kunde.Items.Append(ContactsSheet.Cells[i, 1]);

    ArtikelSheet := Excel.Workbooks[ExcelTablle].Worksheets['Artikel'];
    iMaxZeilen := ArtikelSheet.UsedRange.Rows.Count;
    for i := 1 to iMaxZeilen do
      LB_Artikel.Items.Append(ArtikelSheet.Cells[i, 1]);

    Excel.ActiveWorkBook.Saved := TRUE;
    Excel.Quit; // Beendet Excel
    Excel := Unassigned;
  except
    Showmessage('Fehler, Exceldaten konnten nicht eingelesen werden');
    close;
    Excel.ActiveWorkBook.Saved := TRUE;
    Excel.Quit; // Beendet Excel
  end;
end;
//------------------------------------------------------------------------------
procedure TForm2.Memofüllen;
var
  i:integer;

  begin
  Unit3.Form3.M_Rechnung.Lines.Add(Kundenauswahl);
  for i := 0 to ArtikelAnz - 1 do
    begin
      Unit3.Form3.M_Rechnung.Lines.Add('');
    end;

end;
//------------------------------------------------------------------------------
procedure TForm2.TB_Artikel_AnzahlChange(Sender: TObject);
begin
  ArtikelAuswahl[ArtikelNr].Anzahl:=inttostr(TB_Artikel_Anzahl.Position); //Stückzahl des Artikels wird im Record geändert
  LB_Aus_ArtikelAnz.Items[ArtikelNr]:=inttostr(TB_Artikel_Anzahl.Position);
  L_Test.Caption:=inttostr(TB_Artikel_Anzahl.Position);
end;

//------------------------------------------------------------------------------
end.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Di 07.06.11 00:40 
Hallo Xearox,

folgenden Vorschlag: Excel soll Fax immer als Text interpretieren, selbst dann wenn eine reine Zahl übertragen wird.

ausblenden Delphi-Quelltext
1:
excelFormatString:= '@';					

..
..
ausblenden Delphi-Quelltext
1:
2:
Excel.Sheets['Kontakte'].Cells[450,5]:= excelFormatString;
Excel.Sheets['Kontakte'].Cells[450,5]:=Fax;




Bis bald Chemiker
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Di 07.06.11 10:17 
geht damit immer noch nicht :(
es liegt wirklich nur an diesem einen Fehler, hab einen Screenshot davon gemacht.

Ich habe ein anderes Programm erstellt, womit man auf Artikel hinzufügen kann, bei dem funktioniert alles einwandfrei.

Bei Kontakte jedoch nicht, der schreibt die Daten zwar in die Tabelle, sortiert aber nicht.

Edit: Habe mal Debuggen geklickt, nun ist dort eine Gelbe Zeile markiert.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Private Sub Worksheet_Change(ByVal Target As Range)
'**************************************************
'* H. Ziplies                                     *
'* 04.09.05                                       *
'* erstellt von HajoZiplies@web.de                *
'* http://Hajo-Excel.de/                          *
'**************************************************
'   automatisch sortieren bei Eingabe im Bereich A2:e9999
    Dim RaZelle As Range
    For Each RaZelle In Range(Target.Address)
'column = 5 bedeuted die spalte in der was geändert werden sollte

        If RaZelle.Column = 5 Then
            ActiveSheet.UsedRange.sort Key1:=Range("A1"), Order1:=xlAscending, _
            Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom
            Exit For    ' Schleife verlasse da schon sortiert
        End If
    Next RaZelle
End Sub


Gelb markiert sind die Zeilen 14 und 15
Einloggen, um Attachments anzusehen!
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mi 08.06.11 01:57 
Hallo Xearox,

der Zellbezug liegt außerhalb des zu sortierenden Bereichs, oder ist leer. Ich werde aus deinen Angaben nicht so ganz schlau, aber wenn Du die 5 Spalte sortieren willst, so müsste bei Range nicht „A1“ stehen sondern „E1“. Wenn in der Spalte „A“ nichts steht wird diese Fehlermeldung angezeigt. Rufst Du diese Sub aus Deinem Delphi Programm auf?

Bis bald Chemiker
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Mi 08.06.11 03:32 
Frage, warum lässt Du über eine Worksheet_Change-Prozedur in Excel sortieren?

Die sortiert ja jedesmal, wenn sich etwas in dem Excel-Datenblatt ändert. Auch sind oft Bezüge auf Zellen nicht machbar, wenn eine Change-Prozedur sie nutzt. Ich habe in meinen Excel-Makros Change-Prozeduren komplett ungenutzt gelassen und habe alles in Modulen erledigen lassen. Das ist in meinen Augen besser kontrollierbar. Und führt dann auch nicht zu unnötigen Operationen. Z.B. dann, wenn ich in einer Zelle bloß einen Namen korrigiere oder ganz woanders in dem Datenblatt etwas ändere.

Frage 2: Wenn Du die Changeprozedur herausnimmst, gibt es auch dann diesen Fehler?

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mi 08.06.11 07:58 
Hallo Tranx,

oder man führt die Sortierung innerhalb von OLE mit Delphi aus.

Bis bald Chemiker
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Mi 08.06.11 11:10 
Das Problem ist, das ich selber diese Excel Tabelle nicht erstellt habe, sondern das war die arbeit von meinem Chef...

Das Nächste ist, ich habe keine Ahnung was der da gemacht hat.

Es gibt in der Arbeitsmappe 9 Tabellen Blätter, die erste ist die Rechnungserfassung, in dieser Tabelle wird alles was mit Rechnung schreiben zu tun hat, rein geschrieben. Zum beispiel der Kunde, man klickt in einem Feld rein, da kommt dann eine Dropdownmenü, oder wie das genau heißt, dort werden alle Kunden aufgelistet. Die Adresse wird durch =SVERWEIS($C$10;Kontakte!$A:$E;2;0) aus dem Tabellen Blatt Kontakte raus geholt. Da ist es wichtig, das alles schön sortiert ist, daher ist dort dieses Makro eingebaut, das sobald ein neuer Kontakt unter der Liste eingefügt wird, das der direkt Sortiert wird und zwar nach spalte A1. Also nach Name.

Das Problem ist nun, das er bei der fünften Spalte, wenn dort die Fax Nummer eingetragen wurde, dieser Laufzeit Fehler kommt, aber nur, wenn ich aus Delphi per OLE dort was einfüge. Wenn ich manuell in der Excel liste was eintrage, dann wird kein Fehler angezeigt und der neue Kontakt wird Automatisch sortiert.

So, ich habe noch ein Extra Programm geschrieben, wo man neue Artikel hinzufügen kann. Mit diesem Programm wird auf dem Tabellen Blatt Artikel, bei Zeile 1000 ein neuer Artikel hinzugefügt, Hier erscheint kein Fehler wieso auch immer, der Code ist hier Identisch, nur das hier statt 5 Column nur 2 Column beim Befehl "If RaZelle.Column = 5 Then" steht.

Auch im Delphi Code ist nichts anders, nur bei dem einem werden 5 Zellen ausgefüllt bei dem anderen nur 2.


Ich hoffe, dass es nun verständlicher ist, was das Problem ist.




So: Ich habe den Fehler gefunden...Mein Chef hat mir eine Tabelle gegeben, wo daten gefehlt haben...
Das Problem ist, das die Fax Zelle immer Belegt sein MUSS. Jedoch hat er bei 3 Kunden die Fax Zelle Leer gelassen, weder eine Nummer noch ein " ./. " ... und dadurch ist die Sortier Routine immer abgeschissen...wehe, der kommt nachher zurück ins Büro, dann gibt es ärger...und wenn der dann noch sagt, das habe er extra gemacht, um mich zu ärgern, dann rappelt es...
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Mi 08.06.11 19:56 
Hallo Xearox,

Das kann aber nicht die Ursache für Deine Fehlermeldung sein. Excel sortiert trotz leerer Zellen.

Bis bald Chemiker
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Mi 08.06.11 20:16 
es war aber der fall, verstehe ich auch nicht, wieso