range.copy method throwing unexpected error - vb.net

I have the following code to copy data between 2 different excel files
xlRangeSource = xlsheetSource.Range("B2:K" & IntAmountOfRows)
xlRangeTarget = xlsheetTarget.Range("A" & intStartOfEmptyRow)
xlRangeSource.Copy(Destination:=xlWbTarget.Worksheets(xlsheetTarget).range(xlRangeTarget))
IntAmountOfRows and intStartOfEmptyRow are both integers
When executing my code, I get the following error:
Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
However, I am using a range to copy to a range. I don't understand why the types are a mismatch

Related

Putting graphic into UserForm in VBA

I am trying to put a graphic file into a UserForm Image in VBA. Using the code below
UserForm1.Image1.Picture = "d:\Missionary\Mexico\Daisy Marlene Olivares.bmp"
I get the error
"Compile Error: Type mismatch".
I know that the file path is correct.
Modifying the code to the following
UserForm1.Image1.Picture = LoadPicture("d:\Missionary\Mexico\Daisy Marlene Olivares.bmp")
I get the error
"Compile Error: Sub or Function not defined"
I suspect that part of the reason for this error is because the image control is not ActiveX.
Can anyone help?
You need to reference OLE Automation for the LoadPicture function.

Run-time error when using ExportAsFixedFormat

I get the following error:
Run-time error '-2147467259 (80004005)':
Method 'ExportAsFixedFormat2' of object '_Document' failed
I cannot figure out why the error occurs. See below for the entirety of my code.
Sub ExportAsPDF()
ActiveDocument.ExportAsFixedFormat2 OutputFileName:="test.pdf", ExportFormat:=wdExportFormatPDF, CreateBookmarks:=wdExportCreateHeadingBookmarks
End Sub
The file name is just a test. I've tried using the full path where I want to save it to: /Users/tom/Downloads/test.pdf (no such file already exists at this path).
I've got exactly the same problem and i've found the solution.
the path is too long, which makes the function crash.
Try to copy your file on a smaller path aand retry

vlookup on excel vba throws error 400

I am trying to retrieve "name" in the sheet "Properties" but I keep getting the error 400 whenever I try to run it.
I am able to retrieve each individual content by a MsgBox, but I just don't know why this Vlookup statement throws me an error 400.
temp = Application.WorksheetFunction.VLookup(name,
currentWb.Worksheets("Properties").Range("B2:C11"), 2, False)
This is how I set name:
name = Wb.Worksheets("Sample").Cells(rrow, 9).Value
where "rrow" is my for loop.
And this is how i declare my temp:Dim temp As String
Anybody has any idea why ? Is it something to do with the syntax ?

How to pass different excel files to Excel connection manager in SSIS?

I am passing different excel files to SSIS package. I am picking up from folder by using for each loop, mapped variable in that. I am passing that variable to Excel connection manager, but it is not taking. We are getting below error, but if we hardcode the excel file path it is working fine, but I want it should take from for each loop, because we are getting different Excel files, for example: abc.xls or abc(1).xls or abc 03-03-2016. How to handle this in SSIS?
Error:
TITLE: Package Validation Error
------------------------------
Package Validation Error
------------------------------
ADDITIONAL INFORMATION:
Error at Load Attendance data [Excel Source [1]]: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "Excel Connection Manager 2" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed.
Error at Load Attendance data [SSIS.Pipeline]: component "Excel Source" (1) failed validation and returned error code 0xC020801C.
Error at Load Attendance data [SSIS.Pipeline]: One or more component failed validation.
Error at Load Attendance data: There were errors during task validation.
Error at Tardy Load [Connection manager "Excel Connection Manager 2"]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft JET Database Engine" Hresult: 0x80004005 Description: "Invalid argument.".
(Microsoft.DataTransformationServices.VsIntegration)
------------------------------
BUTTONS:
OK
------------------------------
This is the approach we took to handle a similar problem:
The For Loop assigns the full path of the Excel file to a variable
In the Excel Connection Manager, set the ExcelFilePath element of the Expressions property to that variable
Inside the loop, we have a Script task that will extract the first sheet name assigning it to a ReadWriteVariable in the Script task:
public void Main()
{
string ConnectionString;
OleDbConnection ExcelConnection;
DataTable TablesInFile;
string FirstSheet = "";
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Dts.Variables["WorkingFolderAndFile"].Value.ToString() + ";Extended Properties=Excel 8.0";
ExcelConnection = new OleDbConnection(ConnectionString);
ExcelConnection.Open();
TablesInFile = ExcelConnection.GetSchema("Tables");
foreach (DataRow SheetInFile in TablesInFile.Rows)
{
FirstSheet = SheetInFile["TABLE_NAME"].ToString();
break;
}
Dts.Variables["WorkingSheetName"].Value = FirstSheet;
ExcelConnection.Close();
ExcelConnection.Dispose();
Dts.TaskResult = (int)ScriptResults.Success;
}
Then in the Excel Source Editor, for Data Access Mode, select: Table name or view name variable. And for the variable name, use the variable that contains the first sheet name that was assigned in the Script task.
Also for the Excel Source, you may also have to set these properties:
ValidateExternalMetadata = False
AccessMode = OpenRowset From Variable
OpenRowsetVariable = the sheet variable
Excel doesn't have the capability to regenerate every time, The same package with CSV will work fine.
But, iF you want to use the excel file for sure then Use an Execute SQL task and use an excel connection manager and add the script.
Example:
CREATE TABLE
`Excel Destination` (
`PromotionKey` INTEGER,
`PromotionAlternateKey` INTEGER,
`EnglishPromotionName` NVARCHAR(255),
`SpanishPromotionName` NVARCHAR(255),
`FrenchPromotionName` NVARCHAR(255),
`DiscountPct` DOUBLE PRECISION,
`EnglishPromotionType` NVARCHAR(50),
`SpanishPromotionType` NVARCHAR(50),
`FrenchPromotionType` NVARCHAR(50),
`EnglishPromotionCategory` NVARCHAR(50),
`SpanishPromotionCategory` NVARCHAR(50),
`FrenchPromotionCategory` NVARCHAR(50),
`StartDate` DATETIME,
`EndDate` DATETIME,
`MinQty` INTEGER,
`MaxQty` INTEGER
)
The query will generate a new excel file everytime you run the package and will solve your issue.
Hope it solves your issue.
Create a variable Excel File source as String and add the location of excel folder ,
create another variable excel file Name as a string and also add one file name to it .
Go back to your connection manager , on one of your excel file ...right click to to properties , under expressions select Excel file Path then #[$Package::ExcelFileSource]+"\"+ #[$Package::ExcelFileName]. This will let you not hard code your excel file names .

unable to take Date dynamically every day in ssis

I have created SSIS to generate a excel file from sql
and giving file name dynamically depending upon todays date.
I have not yet deployed package because of testing.
When I changed System date to test wether it is able to create file for that date or not
but it is giving me an following error
Error at Data Flow Task [Excel Destination [34]]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E37.
Error at Data Flow Task [Excel Destination [34]]: Opening a rowset failed. Check that the object exists in the database.
Error at Data Flow Task [SSIS.Pipeline]: "component "Excel Destination" (34)" failed validation and returned validation status "VS_ISBROKEN".
Error at Data Flow Task [SSIS.Pipeline]: One or more component failed validation.
Error at Data Flow Task : There were errors during task validation.
(Microsoft.DataTransformationServices.VsIntegration)
In excel connection manager i have set property excelfilepath in expression
code is #[User::ExcelFileName] + (DT_WSTR, 20) (DT_DBDATE) GETDATE()+".xls"
which is giving evaluated value like C:\2013-05-24.xls
How do I resolved it.
To fix this issue. In the Excel connection manager properties you have to set the "DelayValidation" property to TRUE.