delete_qing 2005-01-21 03:00:51
void SaveAs(const VARIANT& Filename,
const VARIANT& FileFormat,
const VARIANT& Password,
const VARIANT& WriteResPassword,
const VARIANT& ReadOnlyRecommended,
const VARIANT& CreateBackup,
long AccessMode,
const VARIANT& ConflictResolution,
const VARIANT& AddToMru,
const VARIANT& TextCodepage,
const VARIANT& TextVisualLayout,
const VARIANT& Local);
549 点赞 收藏 3
3 条回复
wf21cn 2005-03-04
qrlvls 2005-01-21
可以使用类型为 VT_ERROR 的CVariant 来代替
qrlvls 2005-01-21
Nothing like trying to learn/teach yourself something new to make you humble. Winbatch 99p, Excel 97.
I'm loading a tab delimited file {M:\somedir\myfile.txt} into Excel using OLE to manipulate it some & want to save it as an Excel .xls file {M:\somedir\myfile.txt}.

I can get the file to save under the new name, i.e. with the .xls extension but it's still in tab delimited format, NOT Excel's native file format. The following is from a macro I recorded while doing the action I want to automate: ActiveWorkbook.SaveAs FileName:="M:\TMI_Data\Processed\FEB00.xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

I can get the following code to save the file and add the filename to the MRU list.

fileXL ="M:\TMI_Data\Processed\FEB00.xls"

savefile=Awkbk.SaveAs (fileXL) ; this works

savefile=Awkbk.SaveAs ( fileXL, , , , , ,@True ) ; this works the @True adds the file to the MRU list.

But, whenever I try to insert something in the position that I think the fileformat stuff is supposed to go I get 1261 OLE exception errors or 3250 OLE Object error : Problem occurred formatting parameters. I'm wondering if it's a Named parameter ? If I'm understanding the docs correctly (big IF) a named parameter would go after all the positional parameters ? T/F ?
I've tried a lot of permutations & combinations & haven't stumbled up on something that'll work yet.

How does one differentiate between /tell one from the other on Named vice positional parameters ? I've looked in the VBA help & haven't stumbled onto anything.

Sounds like you almost have it. Positional parameters first, then the :: then the parameter=value pairs for the named parameters.
Question (cont'd):
I'm just not grasping something here.
I've tried the line :

savefile=Awkbk.SaveAs ( fileXL, , , , , , , , , , ::FileFormat = "xlNormal")

with 0 to 10 commas for "positional parameters" between the "fileXL" & the "::".
With 0 or 1 comma I get 1261 OLE exception Error & the following entry from wwwbatch.ini

[OLE Exception]
Microsoft Excel=Unable to get the SaveAs property of the Workbook class

With 2 to 10 commas I get NO ERRORS, BUT while it saves with an .xls extension it is still Tab delimited.
How can you tell if a parameter is a "Named Parameter" ?

The VBA docs make the stuff all look like "Positional parameters"

Maybe there are three required parameters?

Maybe xlNormal is not a tring but a constant and we have to figure out what number it is?

Maybe cut and paste the SaveAs documentation here and we can stare at it.

Bit of an OLE tip that I found a bit by accident.
If you want to know whether something is a string or a constant, do it in VBA - in this case, something like


If it bombs out, it's a string. If it doesn't, it'll return a value for you to plug into your scripts.
Here's the docs for the "SaveAs Method" clipped direct from the VBA help : Saves changes to the sheet (Syntax 1) or workbook (Syntax 2) in a different file.
Syntax 1
expression.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodePage, TextVisualLayout)

Syntax 2
expression.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodePage, TextVisualLayout)

expression Required. An expression that returns a Chart or Worksheet object (Syntax 1) or a Workbook object (Syntax 2).
Filename Optional Variant. A string that indicates the name of the file to be saved. You can include a full path; if you don't, Microsoft Excel saves the file in the current folder.
FileFormat Optional Variant. The file format to use when you save the file. For a list of valid choices, see the FileFormat property.
Password Optional Variant. A case-sensitive string (no more than 15 characters) that indicates the protection password to be given to the file.
WriteResPassword Optional Variant. A string that indicates the write-reservation password for this file. If a file is saved with the password and the password isn't supplied when the file is opened, the file is opened as read-only.
ReadOnlyRecommended Optional Variant. True to display a message when the file is opened, recommending that the file be opened as read-only.
CreateBackup Optional Variant. True to create a backup file.
AccessMode Optional Variant. The workbook access mode. Can be one of the following XlSaveAsAccessMode constants: xlShared (shared list), xlExclusive (exclusive mode), or xlNoChange (don't change the access mode). If this argument is omitted, the access mode isn't changed. This argument is ignored if you save a shared list without changing the file name. To change the access mode, use the ExclusiveAccess method.
ConflictResolution Optional Variant. Specifies the way change conflicts are resolved if the workbook is a shared list. Can be one of the following XlSaveConflictResolution constants: xlUserResolution (display the conflict-resolution dialog box), xlLocalSessionChanges (automatically accept the local user's changes), or xlOtherSessionChanges (accept other changes instead of the local user's changes). If this argument is omitted, the conflict-resolution dialog box is displayed.
AddToMru Optional Variant. True to add this workbook to the list of recently used files. The default value is False.
TextCodePage Optional Variant. Not used in U.S. English Microsoft Excel.
TextVisualLayout Optional Variant. Not used in U.S. English Microsoft Excel.

GREAT Tip -- I inserted your line into the macro & then stepped thru it. It returned a value of -4143. I plugged it into the command like so:
savefile=Awkbk.SaveAs ( fileXL, -4143 , , , , ,@True )

and SHAZAM it works ! It would have been A WHILE before I'd have stumbled on to that. Thanks Again.



2005-01-21 03:00