The simplest thing to try would be to just import one sheet at a time. Do you see crashes even when only importing one sheet at a time?
If that still crashes I see several things you could try and am not sure which would work best for you:
Use .NET/Link and COM
You could use .NET/Link to access excel via COM if you are on Windows to do what you want. But that would mean to know/learn some of the object model and methods of the Excel COM interface. There are some examples in the documentation for .NET/Link to get you started, and of course this site has also at least one example here. That way you'd not necessarily have to export to csv but most probably can receive the content of one sheet (or parts of that) directly.
Use external (command line) programs
Alternatively you could search command line programs which can extract data per worksheet from xlsx files. You could then run them from within Mathematica with Run
or similar functions and import the results. On Windows this would include solutions which use the windows scripting host to run excel from the command line, one example of how to do that is here (you'll find plenty when searching)...
Unpack XLSX as ZIP
.xlsx format is actually a zip archive of some files, where the data is in xml files. So you could try to extract the archive and import the data from those xml files. Here is a very simplified approach which would import the values of the first worksheet in an xls file with just numbers in it:
Cases[Import["file.xlsx", {"ZIP","xl\\worksheets\\sheet1.xml"}],
XMLElement["v", _, v_] :> ToExpression[v], Infinity]
to preserve the table structure and handle other data than pure numbers you'd have to put in some extra effort to analyze the symbolic XML-expression...